<!DOCTYPE html>
<html>
<head><meta charset="utf-8" />
<title>5案例评分卡</title><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>

<style type="text/css">
    /*!
*
* Twitter Bootstrap
*
*/
/*!
 * Bootstrap v3.3.7 (http://getbootstrap.com)
 * Copyright 2011-2016 Twitter, Inc.
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 */
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
html {
  font-family: sans-serif;
  -ms-text-size-adjust: 100%;
  -webkit-text-size-adjust: 100%;
}
body {
  margin: 0;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
  display: block;
}
audio,
canvas,
progress,
video {
  display: inline-block;
  vertical-align: baseline;
}
audio:not([controls]) {
  display: none;
  height: 0;
}
[hidden],
template {
  display: none;
}
a {
  background-color: transparent;
}
a:active,
a:hover {
  outline: 0;
}
abbr[title] {
  border-bottom: 1px dotted;
}
b,
strong {
  font-weight: bold;
}
dfn {
  font-style: italic;
}
h1 {
  font-size: 2em;
  margin: 0.67em 0;
}
mark {
  background: #ff0;
  color: #000;
}
small {
  font-size: 80%;
}
sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}
sup {
  top: -0.5em;
}
sub {
  bottom: -0.25em;
}
img {
  border: 0;
}
svg:not(:root) {
  overflow: hidden;
}
figure {
  margin: 1em 40px;
}
hr {
  box-sizing: content-box;
  height: 0;
}
pre {
  overflow: auto;
}
code,
kbd,
pre,
samp {
  font-family: monospace, monospace;
  font-size: 1em;
}
button,
input,
optgroup,
select,
textarea {
  color: inherit;
  font: inherit;
  margin: 0;
}
button {
  overflow: visible;
}
button,
select {
  text-transform: none;
}
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
  -webkit-appearance: button;
  cursor: pointer;
}
button[disabled],
html input[disabled] {
  cursor: default;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
  border: 0;
  padding: 0;
}
input {
  line-height: normal;
}
input[type="checkbox"],
input[type="radio"] {
  box-sizing: border-box;
  padding: 0;
}
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
  height: auto;
}
input[type="search"] {
  -webkit-appearance: textfield;
  box-sizing: content-box;
}
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
  -webkit-appearance: none;
}
fieldset {
  border: 1px solid #c0c0c0;
  margin: 0 2px;
  padding: 0.35em 0.625em 0.75em;
}
legend {
  border: 0;
  padding: 0;
}
textarea {
  overflow: auto;
}
optgroup {
  font-weight: bold;
}
table {
  border-collapse: collapse;
  border-spacing: 0;
}
td,
th {
  padding: 0;
}
/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
@media print {
  *,
  *:before,
  *:after {
    background: transparent !important;
    color: #000 !important;
    box-shadow: none !important;
    text-shadow: none !important;
  }
  a,
  a:visited {
    text-decoration: underline;
  }
  a[href]:after {
    content: " (" attr(href) ")";
  }
  abbr[title]:after {
    content: " (" attr(title) ")";
  }
  a[href^="#"]:after,
  a[href^="javascript:"]:after {
    content: "";
  }
  pre,
  blockquote {
    border: 1px solid #999;
    page-break-inside: avoid;
  }
  thead {
    display: table-header-group;
  }
  tr,
  img {
    page-break-inside: avoid;
  }
  img {
    max-width: 100% !important;
  }
  p,
  h2,
  h3 {
    orphans: 3;
    widows: 3;
  }
  h2,
  h3 {
    page-break-after: avoid;
  }
  .navbar {
    display: none;
  }
  .btn > .caret,
  .dropup > .btn > .caret {
    border-top-color: #000 !important;
  }
  .label {
    border: 1px solid #000;
  }
  .table {
    border-collapse: collapse !important;
  }
  .table td,
  .table th {
    background-color: #fff !important;
  }
  .table-bordered th,
  .table-bordered td {
    border: 1px solid #ddd !important;
  }
}
@font-face {
  font-family: 'Glyphicons Halflings';
  src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot');
  src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
}
.glyphicon {
  position: relative;
  top: 1px;
  display: inline-block;
  font-family: 'Glyphicons Halflings';
  font-style: normal;
  font-weight: normal;
  line-height: 1;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.glyphicon-asterisk:before {
  content: "\002a";
}
.glyphicon-plus:before {
  content: "\002b";
}
.glyphicon-euro:before,
.glyphicon-eur:before {
  content: "\20ac";
}
.glyphicon-minus:before {
  content: "\2212";
}
.glyphicon-cloud:before {
  content: "\2601";
}
.glyphicon-envelope:before {
  content: "\2709";
}
.glyphicon-pencil:before {
  content: "\270f";
}
.glyphicon-glass:before {
  content: "\e001";
}
.glyphicon-music:before {
  content: "\e002";
}
.glyphicon-search:before {
  content: "\e003";
}
.glyphicon-heart:before {
  content: "\e005";
}
.glyphicon-star:before {
  content: "\e006";
}
.glyphicon-star-empty:before {
  content: "\e007";
}
.glyphicon-user:before {
  content: "\e008";
}
.glyphicon-film:before {
  content: "\e009";
}
.glyphicon-th-large:before {
  content: "\e010";
}
.glyphicon-th:before {
  content: "\e011";
}
.glyphicon-th-list:before {
  content: "\e012";
}
.glyphicon-ok:before {
  content: "\e013";
}
.glyphicon-remove:before {
  content: "\e014";
}
.glyphicon-zoom-in:before {
  content: "\e015";
}
.glyphicon-zoom-out:before {
  content: "\e016";
}
.glyphicon-off:before {
  content: "\e017";
}
.glyphicon-signal:before {
  content: "\e018";
}
.glyphicon-cog:before {
  content: "\e019";
}
.glyphicon-trash:before {
  content: "\e020";
}
.glyphicon-home:before {
  content: "\e021";
}
.glyphicon-file:before {
  content: "\e022";
}
.glyphicon-time:before {
  content: "\e023";
}
.glyphicon-road:before {
  content: "\e024";
}
.glyphicon-download-alt:before {
  content: "\e025";
}
.glyphicon-download:before {
  content: "\e026";
}
.glyphicon-upload:before {
  content: "\e027";
}
.glyphicon-inbox:before {
  content: "\e028";
}
.glyphicon-play-circle:before {
  content: "\e029";
}
.glyphicon-repeat:before {
  content: "\e030";
}
.glyphicon-refresh:before {
  content: "\e031";
}
.glyphicon-list-alt:before {
  content: "\e032";
}
.glyphicon-lock:before {
  content: "\e033";
}
.glyphicon-flag:before {
  content: "\e034";
}
.glyphicon-headphones:before {
  content: "\e035";
}
.glyphicon-volume-off:before {
  content: "\e036";
}
.glyphicon-volume-down:before {
  content: "\e037";
}
.glyphicon-volume-up:before {
  content: "\e038";
}
.glyphicon-qrcode:before {
  content: "\e039";
}
.glyphicon-barcode:before {
  content: "\e040";
}
.glyphicon-tag:before {
  content: "\e041";
}
.glyphicon-tags:before {
  content: "\e042";
}
.glyphicon-book:before {
  content: "\e043";
}
.glyphicon-bookmark:before {
  content: "\e044";
}
.glyphicon-print:before {
  content: "\e045";
}
.glyphicon-camera:before {
  content: "\e046";
}
.glyphicon-font:before {
  content: "\e047";
}
.glyphicon-bold:before {
  content: "\e048";
}
.glyphicon-italic:before {
  content: "\e049";
}
.glyphicon-text-height:before {
  content: "\e050";
}
.glyphicon-text-width:before {
  content: "\e051";
}
.glyphicon-align-left:before {
  content: "\e052";
}
.glyphicon-align-center:before {
  content: "\e053";
}
.glyphicon-align-right:before {
  content: "\e054";
}
.glyphicon-align-justify:before {
  content: "\e055";
}
.glyphicon-list:before {
  content: "\e056";
}
.glyphicon-indent-left:before {
  content: "\e057";
}
.glyphicon-indent-right:before {
  content: "\e058";
}
.glyphicon-facetime-video:before {
  content: "\e059";
}
.glyphicon-picture:before {
  content: "\e060";
}
.glyphicon-map-marker:before {
  content: "\e062";
}
.glyphicon-adjust:before {
  content: "\e063";
}
.glyphicon-tint:before {
  content: "\e064";
}
.glyphicon-edit:before {
  content: "\e065";
}
.glyphicon-share:before {
  content: "\e066";
}
.glyphicon-check:before {
  content: "\e067";
}
.glyphicon-move:before {
  content: "\e068";
}
.glyphicon-step-backward:before {
  content: "\e069";
}
.glyphicon-fast-backward:before {
  content: "\e070";
}
.glyphicon-backward:before {
  content: "\e071";
}
.glyphicon-play:before {
  content: "\e072";
}
.glyphicon-pause:before {
  content: "\e073";
}
.glyphicon-stop:before {
  content: "\e074";
}
.glyphicon-forward:before {
  content: "\e075";
}
.glyphicon-fast-forward:before {
  content: "\e076";
}
.glyphicon-step-forward:before {
  content: "\e077";
}
.glyphicon-eject:before {
  content: "\e078";
}
.glyphicon-chevron-left:before {
  content: "\e079";
}
.glyphicon-chevron-right:before {
  content: "\e080";
}
.glyphicon-plus-sign:before {
  content: "\e081";
}
.glyphicon-minus-sign:before {
  content: "\e082";
}
.glyphicon-remove-sign:before {
  content: "\e083";
}
.glyphicon-ok-sign:before {
  content: "\e084";
}
.glyphicon-question-sign:before {
  content: "\e085";
}
.glyphicon-info-sign:before {
  content: "\e086";
}
.glyphicon-screenshot:before {
  content: "\e087";
}
.glyphicon-remove-circle:before {
  content: "\e088";
}
.glyphicon-ok-circle:before {
  content: "\e089";
}
.glyphicon-ban-circle:before {
  content: "\e090";
}
.glyphicon-arrow-left:before {
  content: "\e091";
}
.glyphicon-arrow-right:before {
  content: "\e092";
}
.glyphicon-arrow-up:before {
  content: "\e093";
}
.glyphicon-arrow-down:before {
  content: "\e094";
}
.glyphicon-share-alt:before {
  content: "\e095";
}
.glyphicon-resize-full:before {
  content: "\e096";
}
.glyphicon-resize-small:before {
  content: "\e097";
}
.glyphicon-exclamation-sign:before {
  content: "\e101";
}
.glyphicon-gift:before {
  content: "\e102";
}
.glyphicon-leaf:before {
  content: "\e103";
}
.glyphicon-fire:before {
  content: "\e104";
}
.glyphicon-eye-open:before {
  content: "\e105";
}
.glyphicon-eye-close:before {
  content: "\e106";
}
.glyphicon-warning-sign:before {
  content: "\e107";
}
.glyphicon-plane:before {
  content: "\e108";
}
.glyphicon-calendar:before {
  content: "\e109";
}
.glyphicon-random:before {
  content: "\e110";
}
.glyphicon-comment:before {
  content: "\e111";
}
.glyphicon-magnet:before {
  content: "\e112";
}
.glyphicon-chevron-up:before {
  content: "\e113";
}
.glyphicon-chevron-down:before {
  content: "\e114";
}
.glyphicon-retweet:before {
  content: "\e115";
}
.glyphicon-shopping-cart:before {
  content: "\e116";
}
.glyphicon-folder-close:before {
  content: "\e117";
}
.glyphicon-folder-open:before {
  content: "\e118";
}
.glyphicon-resize-vertical:before {
  content: "\e119";
}
.glyphicon-resize-horizontal:before {
  content: "\e120";
}
.glyphicon-hdd:before {
  content: "\e121";
}
.glyphicon-bullhorn:before {
  content: "\e122";
}
.glyphicon-bell:before {
  content: "\e123";
}
.glyphicon-certificate:before {
  content: "\e124";
}
.glyphicon-thumbs-up:before {
  content: "\e125";
}
.glyphicon-thumbs-down:before {
  content: "\e126";
}
.glyphicon-hand-right:before {
  content: "\e127";
}
.glyphicon-hand-left:before {
  content: "\e128";
}
.glyphicon-hand-up:before {
  content: "\e129";
}
.glyphicon-hand-down:before {
  content: "\e130";
}
.glyphicon-circle-arrow-right:before {
  content: "\e131";
}
.glyphicon-circle-arrow-left:before {
  content: "\e132";
}
.glyphicon-circle-arrow-up:before {
  content: "\e133";
}
.glyphicon-circle-arrow-down:before {
  content: "\e134";
}
.glyphicon-globe:before {
  content: "\e135";
}
.glyphicon-wrench:before {
  content: "\e136";
}
.glyphicon-tasks:before {
  content: "\e137";
}
.glyphicon-filter:before {
  content: "\e138";
}
.glyphicon-briefcase:before {
  content: "\e139";
}
.glyphicon-fullscreen:before {
  content: "\e140";
}
.glyphicon-dashboard:before {
  content: "\e141";
}
.glyphicon-paperclip:before {
  content: "\e142";
}
.glyphicon-heart-empty:before {
  content: "\e143";
}
.glyphicon-link:before {
  content: "\e144";
}
.glyphicon-phone:before {
  content: "\e145";
}
.glyphicon-pushpin:before {
  content: "\e146";
}
.glyphicon-usd:before {
  content: "\e148";
}
.glyphicon-gbp:before {
  content: "\e149";
}
.glyphicon-sort:before {
  content: "\e150";
}
.glyphicon-sort-by-alphabet:before {
  content: "\e151";
}
.glyphicon-sort-by-alphabet-alt:before {
  content: "\e152";
}
.glyphicon-sort-by-order:before {
  content: "\e153";
}
.glyphicon-sort-by-order-alt:before {
  content: "\e154";
}
.glyphicon-sort-by-attributes:before {
  content: "\e155";
}
.glyphicon-sort-by-attributes-alt:before {
  content: "\e156";
}
.glyphicon-unchecked:before {
  content: "\e157";
}
.glyphicon-expand:before {
  content: "\e158";
}
.glyphicon-collapse-down:before {
  content: "\e159";
}
.glyphicon-collapse-up:before {
  content: "\e160";
}
.glyphicon-log-in:before {
  content: "\e161";
}
.glyphicon-flash:before {
  content: "\e162";
}
.glyphicon-log-out:before {
  content: "\e163";
}
.glyphicon-new-window:before {
  content: "\e164";
}
.glyphicon-record:before {
  content: "\e165";
}
.glyphicon-save:before {
  content: "\e166";
}
.glyphicon-open:before {
  content: "\e167";
}
.glyphicon-saved:before {
  content: "\e168";
}
.glyphicon-import:before {
  content: "\e169";
}
.glyphicon-export:before {
  content: "\e170";
}
.glyphicon-send:before {
  content: "\e171";
}
.glyphicon-floppy-disk:before {
  content: "\e172";
}
.glyphicon-floppy-saved:before {
  content: "\e173";
}
.glyphicon-floppy-remove:before {
  content: "\e174";
}
.glyphicon-floppy-save:before {
  content: "\e175";
}
.glyphicon-floppy-open:before {
  content: "\e176";
}
.glyphicon-credit-card:before {
  content: "\e177";
}
.glyphicon-transfer:before {
  content: "\e178";
}
.glyphicon-cutlery:before {
  content: "\e179";
}
.glyphicon-header:before {
  content: "\e180";
}
.glyphicon-compressed:before {
  content: "\e181";
}
.glyphicon-earphone:before {
  content: "\e182";
}
.glyphicon-phone-alt:before {
  content: "\e183";
}
.glyphicon-tower:before {
  content: "\e184";
}
.glyphicon-stats:before {
  content: "\e185";
}
.glyphicon-sd-video:before {
  content: "\e186";
}
.glyphicon-hd-video:before {
  content: "\e187";
}
.glyphicon-subtitles:before {
  content: "\e188";
}
.glyphicon-sound-stereo:before {
  content: "\e189";
}
.glyphicon-sound-dolby:before {
  content: "\e190";
}
.glyphicon-sound-5-1:before {
  content: "\e191";
}
.glyphicon-sound-6-1:before {
  content: "\e192";
}
.glyphicon-sound-7-1:before {
  content: "\e193";
}
.glyphicon-copyright-mark:before {
  content: "\e194";
}
.glyphicon-registration-mark:before {
  content: "\e195";
}
.glyphicon-cloud-download:before {
  content: "\e197";
}
.glyphicon-cloud-upload:before {
  content: "\e198";
}
.glyphicon-tree-conifer:before {
  content: "\e199";
}
.glyphicon-tree-deciduous:before {
  content: "\e200";
}
.glyphicon-cd:before {
  content: "\e201";
}
.glyphicon-save-file:before {
  content: "\e202";
}
.glyphicon-open-file:before {
  content: "\e203";
}
.glyphicon-level-up:before {
  content: "\e204";
}
.glyphicon-copy:before {
  content: "\e205";
}
.glyphicon-paste:before {
  content: "\e206";
}
.glyphicon-alert:before {
  content: "\e209";
}
.glyphicon-equalizer:before {
  content: "\e210";
}
.glyphicon-king:before {
  content: "\e211";
}
.glyphicon-queen:before {
  content: "\e212";
}
.glyphicon-pawn:before {
  content: "\e213";
}
.glyphicon-bishop:before {
  content: "\e214";
}
.glyphicon-knight:before {
  content: "\e215";
}
.glyphicon-baby-formula:before {
  content: "\e216";
}
.glyphicon-tent:before {
  content: "\26fa";
}
.glyphicon-blackboard:before {
  content: "\e218";
}
.glyphicon-bed:before {
  content: "\e219";
}
.glyphicon-apple:before {
  content: "\f8ff";
}
.glyphicon-erase:before {
  content: "\e221";
}
.glyphicon-hourglass:before {
  content: "\231b";
}
.glyphicon-lamp:before {
  content: "\e223";
}
.glyphicon-duplicate:before {
  content: "\e224";
}
.glyphicon-piggy-bank:before {
  content: "\e225";
}
.glyphicon-scissors:before {
  content: "\e226";
}
.glyphicon-bitcoin:before {
  content: "\e227";
}
.glyphicon-btc:before {
  content: "\e227";
}
.glyphicon-xbt:before {
  content: "\e227";
}
.glyphicon-yen:before {
  content: "\00a5";
}
.glyphicon-jpy:before {
  content: "\00a5";
}
.glyphicon-ruble:before {
  content: "\20bd";
}
.glyphicon-rub:before {
  content: "\20bd";
}
.glyphicon-scale:before {
  content: "\e230";
}
.glyphicon-ice-lolly:before {
  content: "\e231";
}
.glyphicon-ice-lolly-tasted:before {
  content: "\e232";
}
.glyphicon-education:before {
  content: "\e233";
}
.glyphicon-option-horizontal:before {
  content: "\e234";
}
.glyphicon-option-vertical:before {
  content: "\e235";
}
.glyphicon-menu-hamburger:before {
  content: "\e236";
}
.glyphicon-modal-window:before {
  content: "\e237";
}
.glyphicon-oil:before {
  content: "\e238";
}
.glyphicon-grain:before {
  content: "\e239";
}
.glyphicon-sunglasses:before {
  content: "\e240";
}
.glyphicon-text-size:before {
  content: "\e241";
}
.glyphicon-text-color:before {
  content: "\e242";
}
.glyphicon-text-background:before {
  content: "\e243";
}
.glyphicon-object-align-top:before {
  content: "\e244";
}
.glyphicon-object-align-bottom:before {
  content: "\e245";
}
.glyphicon-object-align-horizontal:before {
  content: "\e246";
}
.glyphicon-object-align-left:before {
  content: "\e247";
}
.glyphicon-object-align-vertical:before {
  content: "\e248";
}
.glyphicon-object-align-right:before {
  content: "\e249";
}
.glyphicon-triangle-right:before {
  content: "\e250";
}
.glyphicon-triangle-left:before {
  content: "\e251";
}
.glyphicon-triangle-bottom:before {
  content: "\e252";
}
.glyphicon-triangle-top:before {
  content: "\e253";
}
.glyphicon-console:before {
  content: "\e254";
}
.glyphicon-superscript:before {
  content: "\e255";
}
.glyphicon-subscript:before {
  content: "\e256";
}
.glyphicon-menu-left:before {
  content: "\e257";
}
.glyphicon-menu-right:before {
  content: "\e258";
}
.glyphicon-menu-down:before {
  content: "\e259";
}
.glyphicon-menu-up:before {
  content: "\e260";
}
* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
*:before,
*:after {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
html {
  font-size: 10px;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
body {
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 13px;
  line-height: 1.42857143;
  color: #000;
  background-color: #fff;
}
input,
button,
select,
textarea {
  font-family: inherit;
  font-size: inherit;
  line-height: inherit;
}
a {
  color: #337ab7;
  text-decoration: none;
}
a:hover,
a:focus {
  color: #23527c;
  text-decoration: underline;
}
a:focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
figure {
  margin: 0;
}
img {
  vertical-align: middle;
}
.img-responsive,
.thumbnail > img,
.thumbnail a > img,
.carousel-inner > .item > img,
.carousel-inner > .item > a > img {
  display: block;
  max-width: 100%;
  height: auto;
}
.img-rounded {
  border-radius: 3px;
}
.img-thumbnail {
  padding: 4px;
  line-height: 1.42857143;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 2px;
  -webkit-transition: all 0.2s ease-in-out;
  -o-transition: all 0.2s ease-in-out;
  transition: all 0.2s ease-in-out;
  display: inline-block;
  max-width: 100%;
  height: auto;
}
.img-circle {
  border-radius: 50%;
}
hr {
  margin-top: 18px;
  margin-bottom: 18px;
  border: 0;
  border-top: 1px solid #eeeeee;
}
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  border: 0;
}
.sr-only-focusable:active,
.sr-only-focusable:focus {
  position: static;
  width: auto;
  height: auto;
  margin: 0;
  overflow: visible;
  clip: auto;
}
[role="button"] {
  cursor: pointer;
}
h1,
h2,
h3,
h4,
h5,
h6,
.h1,
.h2,
.h3,
.h4,
.h5,
.h6 {
  font-family: inherit;
  font-weight: 500;
  line-height: 1.1;
  color: inherit;
}
h1 small,
h2 small,
h3 small,
h4 small,
h5 small,
h6 small,
.h1 small,
.h2 small,
.h3 small,
.h4 small,
.h5 small,
.h6 small,
h1 .small,
h2 .small,
h3 .small,
h4 .small,
h5 .small,
h6 .small,
.h1 .small,
.h2 .small,
.h3 .small,
.h4 .small,
.h5 .small,
.h6 .small {
  font-weight: normal;
  line-height: 1;
  color: #777777;
}
h1,
.h1,
h2,
.h2,
h3,
.h3 {
  margin-top: 18px;
  margin-bottom: 9px;
}
h1 small,
.h1 small,
h2 small,
.h2 small,
h3 small,
.h3 small,
h1 .small,
.h1 .small,
h2 .small,
.h2 .small,
h3 .small,
.h3 .small {
  font-size: 65%;
}
h4,
.h4,
h5,
.h5,
h6,
.h6 {
  margin-top: 9px;
  margin-bottom: 9px;
}
h4 small,
.h4 small,
h5 small,
.h5 small,
h6 small,
.h6 small,
h4 .small,
.h4 .small,
h5 .small,
.h5 .small,
h6 .small,
.h6 .small {
  font-size: 75%;
}
h1,
.h1 {
  font-size: 33px;
}
h2,
.h2 {
  font-size: 27px;
}
h3,
.h3 {
  font-size: 23px;
}
h4,
.h4 {
  font-size: 17px;
}
h5,
.h5 {
  font-size: 13px;
}
h6,
.h6 {
  font-size: 12px;
}
p {
  margin: 0 0 9px;
}
.lead {
  margin-bottom: 18px;
  font-size: 14px;
  font-weight: 300;
  line-height: 1.4;
}
@media (min-width: 768px) {
  .lead {
    font-size: 19.5px;
  }
}
small,
.small {
  font-size: 92%;
}
mark,
.mark {
  background-color: #fcf8e3;
  padding: .2em;
}
.text-left {
  text-align: left;
}
.text-right {
  text-align: right;
}
.text-center {
  text-align: center;
}
.text-justify {
  text-align: justify;
}
.text-nowrap {
  white-space: nowrap;
}
.text-lowercase {
  text-transform: lowercase;
}
.text-uppercase {
  text-transform: uppercase;
}
.text-capitalize {
  text-transform: capitalize;
}
.text-muted {
  color: #777777;
}
.text-primary {
  color: #337ab7;
}
a.text-primary:hover,
a.text-primary:focus {
  color: #286090;
}
.text-success {
  color: #3c763d;
}
a.text-success:hover,
a.text-success:focus {
  color: #2b542c;
}
.text-info {
  color: #31708f;
}
a.text-info:hover,
a.text-info:focus {
  color: #245269;
}
.text-warning {
  color: #8a6d3b;
}
a.text-warning:hover,
a.text-warning:focus {
  color: #66512c;
}
.text-danger {
  color: #a94442;
}
a.text-danger:hover,
a.text-danger:focus {
  color: #843534;
}
.bg-primary {
  color: #fff;
  background-color: #337ab7;
}
a.bg-primary:hover,
a.bg-primary:focus {
  background-color: #286090;
}
.bg-success {
  background-color: #dff0d8;
}
a.bg-success:hover,
a.bg-success:focus {
  background-color: #c1e2b3;
}
.bg-info {
  background-color: #d9edf7;
}
a.bg-info:hover,
a.bg-info:focus {
  background-color: #afd9ee;
}
.bg-warning {
  background-color: #fcf8e3;
}
a.bg-warning:hover,
a.bg-warning:focus {
  background-color: #f7ecb5;
}
.bg-danger {
  background-color: #f2dede;
}
a.bg-danger:hover,
a.bg-danger:focus {
  background-color: #e4b9b9;
}
.page-header {
  padding-bottom: 8px;
  margin: 36px 0 18px;
  border-bottom: 1px solid #eeeeee;
}
ul,
ol {
  margin-top: 0;
  margin-bottom: 9px;
}
ul ul,
ol ul,
ul ol,
ol ol {
  margin-bottom: 0;
}
.list-unstyled {
  padding-left: 0;
  list-style: none;
}
.list-inline {
  padding-left: 0;
  list-style: none;
  margin-left: -5px;
}
.list-inline > li {
  display: inline-block;
  padding-left: 5px;
  padding-right: 5px;
}
dl {
  margin-top: 0;
  margin-bottom: 18px;
}
dt,
dd {
  line-height: 1.42857143;
}
dt {
  font-weight: bold;
}
dd {
  margin-left: 0;
}
@media (min-width: 541px) {
  .dl-horizontal dt {
    float: left;
    width: 160px;
    clear: left;
    text-align: right;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .dl-horizontal dd {
    margin-left: 180px;
  }
}
abbr[title],
abbr[data-original-title] {
  cursor: help;
  border-bottom: 1px dotted #777777;
}
.initialism {
  font-size: 90%;
  text-transform: uppercase;
}
blockquote {
  padding: 9px 18px;
  margin: 0 0 18px;
  font-size: inherit;
  border-left: 5px solid #eeeeee;
}
blockquote p:last-child,
blockquote ul:last-child,
blockquote ol:last-child {
  margin-bottom: 0;
}
blockquote footer,
blockquote small,
blockquote .small {
  display: block;
  font-size: 80%;
  line-height: 1.42857143;
  color: #777777;
}
blockquote footer:before,
blockquote small:before,
blockquote .small:before {
  content: '\2014 \00A0';
}
.blockquote-reverse,
blockquote.pull-right {
  padding-right: 15px;
  padding-left: 0;
  border-right: 5px solid #eeeeee;
  border-left: 0;
  text-align: right;
}
.blockquote-reverse footer:before,
blockquote.pull-right footer:before,
.blockquote-reverse small:before,
blockquote.pull-right small:before,
.blockquote-reverse .small:before,
blockquote.pull-right .small:before {
  content: '';
}
.blockquote-reverse footer:after,
blockquote.pull-right footer:after,
.blockquote-reverse small:after,
blockquote.pull-right small:after,
.blockquote-reverse .small:after,
blockquote.pull-right .small:after {
  content: '\00A0 \2014';
}
address {
  margin-bottom: 18px;
  font-style: normal;
  line-height: 1.42857143;
}
code,
kbd,
pre,
samp {
  font-family: monospace;
}
code {
  padding: 2px 4px;
  font-size: 90%;
  color: #c7254e;
  background-color: #f9f2f4;
  border-radius: 2px;
}
kbd {
  padding: 2px 4px;
  font-size: 90%;
  color: #888;
  background-color: transparent;
  border-radius: 1px;
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
}
kbd kbd {
  padding: 0;
  font-size: 100%;
  font-weight: bold;
  box-shadow: none;
}
pre {
  display: block;
  padding: 8.5px;
  margin: 0 0 9px;
  font-size: 12px;
  line-height: 1.42857143;
  word-break: break-all;
  word-wrap: break-word;
  color: #333333;
  background-color: #f5f5f5;
  border: 1px solid #ccc;
  border-radius: 2px;
}
pre code {
  padding: 0;
  font-size: inherit;
  color: inherit;
  white-space: pre-wrap;
  background-color: transparent;
  border-radius: 0;
}
.pre-scrollable {
  max-height: 340px;
  overflow-y: scroll;
}
.container {
  margin-right: auto;
  margin-left: auto;
  padding-left: 0px;
  padding-right: 0px;
}
@media (min-width: 768px) {
  .container {
    width: 768px;
  }
}
@media (min-width: 992px) {
  .container {
    width: 940px;
  }
}
@media (min-width: 1200px) {
  .container {
    width: 1140px;
  }
}
.container-fluid {
  margin-right: auto;
  margin-left: auto;
  padding-left: 0px;
  padding-right: 0px;
}
.row {
  margin-left: 0px;
  margin-right: 0px;
}
.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
  position: relative;
  min-height: 1px;
  padding-left: 0px;
  padding-right: 0px;
}
.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
  float: left;
}
.col-xs-12 {
  width: 100%;
}
.col-xs-11 {
  width: 91.66666667%;
}
.col-xs-10 {
  width: 83.33333333%;
}
.col-xs-9 {
  width: 75%;
}
.col-xs-8 {
  width: 66.66666667%;
}
.col-xs-7 {
  width: 58.33333333%;
}
.col-xs-6 {
  width: 50%;
}
.col-xs-5 {
  width: 41.66666667%;
}
.col-xs-4 {
  width: 33.33333333%;
}
.col-xs-3 {
  width: 25%;
}
.col-xs-2 {
  width: 16.66666667%;
}
.col-xs-1 {
  width: 8.33333333%;
}
.col-xs-pull-12 {
  right: 100%;
}
.col-xs-pull-11 {
  right: 91.66666667%;
}
.col-xs-pull-10 {
  right: 83.33333333%;
}
.col-xs-pull-9 {
  right: 75%;
}
.col-xs-pull-8 {
  right: 66.66666667%;
}
.col-xs-pull-7 {
  right: 58.33333333%;
}
.col-xs-pull-6 {
  right: 50%;
}
.col-xs-pull-5 {
  right: 41.66666667%;
}
.col-xs-pull-4 {
  right: 33.33333333%;
}
.col-xs-pull-3 {
  right: 25%;
}
.col-xs-pull-2 {
  right: 16.66666667%;
}
.col-xs-pull-1 {
  right: 8.33333333%;
}
.col-xs-pull-0 {
  right: auto;
}
.col-xs-push-12 {
  left: 100%;
}
.col-xs-push-11 {
  left: 91.66666667%;
}
.col-xs-push-10 {
  left: 83.33333333%;
}
.col-xs-push-9 {
  left: 75%;
}
.col-xs-push-8 {
  left: 66.66666667%;
}
.col-xs-push-7 {
  left: 58.33333333%;
}
.col-xs-push-6 {
  left: 50%;
}
.col-xs-push-5 {
  left: 41.66666667%;
}
.col-xs-push-4 {
  left: 33.33333333%;
}
.col-xs-push-3 {
  left: 25%;
}
.col-xs-push-2 {
  left: 16.66666667%;
}
.col-xs-push-1 {
  left: 8.33333333%;
}
.col-xs-push-0 {
  left: auto;
}
.col-xs-offset-12 {
  margin-left: 100%;
}
.col-xs-offset-11 {
  margin-left: 91.66666667%;
}
.col-xs-offset-10 {
  margin-left: 83.33333333%;
}
.col-xs-offset-9 {
  margin-left: 75%;
}
.col-xs-offset-8 {
  margin-left: 66.66666667%;
}
.col-xs-offset-7 {
  margin-left: 58.33333333%;
}
.col-xs-offset-6 {
  margin-left: 50%;
}
.col-xs-offset-5 {
  margin-left: 41.66666667%;
}
.col-xs-offset-4 {
  margin-left: 33.33333333%;
}
.col-xs-offset-3 {
  margin-left: 25%;
}
.col-xs-offset-2 {
  margin-left: 16.66666667%;
}
.col-xs-offset-1 {
  margin-left: 8.33333333%;
}
.col-xs-offset-0 {
  margin-left: 0%;
}
@media (min-width: 768px) {
  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
    float: left;
  }
  .col-sm-12 {
    width: 100%;
  }
  .col-sm-11 {
    width: 91.66666667%;
  }
  .col-sm-10 {
    width: 83.33333333%;
  }
  .col-sm-9 {
    width: 75%;
  }
  .col-sm-8 {
    width: 66.66666667%;
  }
  .col-sm-7 {
    width: 58.33333333%;
  }
  .col-sm-6 {
    width: 50%;
  }
  .col-sm-5 {
    width: 41.66666667%;
  }
  .col-sm-4 {
    width: 33.33333333%;
  }
  .col-sm-3 {
    width: 25%;
  }
  .col-sm-2 {
    width: 16.66666667%;
  }
  .col-sm-1 {
    width: 8.33333333%;
  }
  .col-sm-pull-12 {
    right: 100%;
  }
  .col-sm-pull-11 {
    right: 91.66666667%;
  }
  .col-sm-pull-10 {
    right: 83.33333333%;
  }
  .col-sm-pull-9 {
    right: 75%;
  }
  .col-sm-pull-8 {
    right: 66.66666667%;
  }
  .col-sm-pull-7 {
    right: 58.33333333%;
  }
  .col-sm-pull-6 {
    right: 50%;
  }
  .col-sm-pull-5 {
    right: 41.66666667%;
  }
  .col-sm-pull-4 {
    right: 33.33333333%;
  }
  .col-sm-pull-3 {
    right: 25%;
  }
  .col-sm-pull-2 {
    right: 16.66666667%;
  }
  .col-sm-pull-1 {
    right: 8.33333333%;
  }
  .col-sm-pull-0 {
    right: auto;
  }
  .col-sm-push-12 {
    left: 100%;
  }
  .col-sm-push-11 {
    left: 91.66666667%;
  }
  .col-sm-push-10 {
    left: 83.33333333%;
  }
  .col-sm-push-9 {
    left: 75%;
  }
  .col-sm-push-8 {
    left: 66.66666667%;
  }
  .col-sm-push-7 {
    left: 58.33333333%;
  }
  .col-sm-push-6 {
    left: 50%;
  }
  .col-sm-push-5 {
    left: 41.66666667%;
  }
  .col-sm-push-4 {
    left: 33.33333333%;
  }
  .col-sm-push-3 {
    left: 25%;
  }
  .col-sm-push-2 {
    left: 16.66666667%;
  }
  .col-sm-push-1 {
    left: 8.33333333%;
  }
  .col-sm-push-0 {
    left: auto;
  }
  .col-sm-offset-12 {
    margin-left: 100%;
  }
  .col-sm-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-sm-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-sm-offset-9 {
    margin-left: 75%;
  }
  .col-sm-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-sm-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-sm-offset-6 {
    margin-left: 50%;
  }
  .col-sm-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-sm-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-sm-offset-3 {
    margin-left: 25%;
  }
  .col-sm-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-sm-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-sm-offset-0 {
    margin-left: 0%;
  }
}
@media (min-width: 992px) {
  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
    float: left;
  }
  .col-md-12 {
    width: 100%;
  }
  .col-md-11 {
    width: 91.66666667%;
  }
  .col-md-10 {
    width: 83.33333333%;
  }
  .col-md-9 {
    width: 75%;
  }
  .col-md-8 {
    width: 66.66666667%;
  }
  .col-md-7 {
    width: 58.33333333%;
  }
  .col-md-6 {
    width: 50%;
  }
  .col-md-5 {
    width: 41.66666667%;
  }
  .col-md-4 {
    width: 33.33333333%;
  }
  .col-md-3 {
    width: 25%;
  }
  .col-md-2 {
    width: 16.66666667%;
  }
  .col-md-1 {
    width: 8.33333333%;
  }
  .col-md-pull-12 {
    right: 100%;
  }
  .col-md-pull-11 {
    right: 91.66666667%;
  }
  .col-md-pull-10 {
    right: 83.33333333%;
  }
  .col-md-pull-9 {
    right: 75%;
  }
  .col-md-pull-8 {
    right: 66.66666667%;
  }
  .col-md-pull-7 {
    right: 58.33333333%;
  }
  .col-md-pull-6 {
    right: 50%;
  }
  .col-md-pull-5 {
    right: 41.66666667%;
  }
  .col-md-pull-4 {
    right: 33.33333333%;
  }
  .col-md-pull-3 {
    right: 25%;
  }
  .col-md-pull-2 {
    right: 16.66666667%;
  }
  .col-md-pull-1 {
    right: 8.33333333%;
  }
  .col-md-pull-0 {
    right: auto;
  }
  .col-md-push-12 {
    left: 100%;
  }
  .col-md-push-11 {
    left: 91.66666667%;
  }
  .col-md-push-10 {
    left: 83.33333333%;
  }
  .col-md-push-9 {
    left: 75%;
  }
  .col-md-push-8 {
    left: 66.66666667%;
  }
  .col-md-push-7 {
    left: 58.33333333%;
  }
  .col-md-push-6 {
    left: 50%;
  }
  .col-md-push-5 {
    left: 41.66666667%;
  }
  .col-md-push-4 {
    left: 33.33333333%;
  }
  .col-md-push-3 {
    left: 25%;
  }
  .col-md-push-2 {
    left: 16.66666667%;
  }
  .col-md-push-1 {
    left: 8.33333333%;
  }
  .col-md-push-0 {
    left: auto;
  }
  .col-md-offset-12 {
    margin-left: 100%;
  }
  .col-md-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-md-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-md-offset-9 {
    margin-left: 75%;
  }
  .col-md-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-md-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-md-offset-6 {
    margin-left: 50%;
  }
  .col-md-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-md-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-md-offset-3 {
    margin-left: 25%;
  }
  .col-md-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-md-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-md-offset-0 {
    margin-left: 0%;
  }
}
@media (min-width: 1200px) {
  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
    float: left;
  }
  .col-lg-12 {
    width: 100%;
  }
  .col-lg-11 {
    width: 91.66666667%;
  }
  .col-lg-10 {
    width: 83.33333333%;
  }
  .col-lg-9 {
    width: 75%;
  }
  .col-lg-8 {
    width: 66.66666667%;
  }
  .col-lg-7 {
    width: 58.33333333%;
  }
  .col-lg-6 {
    width: 50%;
  }
  .col-lg-5 {
    width: 41.66666667%;
  }
  .col-lg-4 {
    width: 33.33333333%;
  }
  .col-lg-3 {
    width: 25%;
  }
  .col-lg-2 {
    width: 16.66666667%;
  }
  .col-lg-1 {
    width: 8.33333333%;
  }
  .col-lg-pull-12 {
    right: 100%;
  }
  .col-lg-pull-11 {
    right: 91.66666667%;
  }
  .col-lg-pull-10 {
    right: 83.33333333%;
  }
  .col-lg-pull-9 {
    right: 75%;
  }
  .col-lg-pull-8 {
    right: 66.66666667%;
  }
  .col-lg-pull-7 {
    right: 58.33333333%;
  }
  .col-lg-pull-6 {
    right: 50%;
  }
  .col-lg-pull-5 {
    right: 41.66666667%;
  }
  .col-lg-pull-4 {
    right: 33.33333333%;
  }
  .col-lg-pull-3 {
    right: 25%;
  }
  .col-lg-pull-2 {
    right: 16.66666667%;
  }
  .col-lg-pull-1 {
    right: 8.33333333%;
  }
  .col-lg-pull-0 {
    right: auto;
  }
  .col-lg-push-12 {
    left: 100%;
  }
  .col-lg-push-11 {
    left: 91.66666667%;
  }
  .col-lg-push-10 {
    left: 83.33333333%;
  }
  .col-lg-push-9 {
    left: 75%;
  }
  .col-lg-push-8 {
    left: 66.66666667%;
  }
  .col-lg-push-7 {
    left: 58.33333333%;
  }
  .col-lg-push-6 {
    left: 50%;
  }
  .col-lg-push-5 {
    left: 41.66666667%;
  }
  .col-lg-push-4 {
    left: 33.33333333%;
  }
  .col-lg-push-3 {
    left: 25%;
  }
  .col-lg-push-2 {
    left: 16.66666667%;
  }
  .col-lg-push-1 {
    left: 8.33333333%;
  }
  .col-lg-push-0 {
    left: auto;
  }
  .col-lg-offset-12 {
    margin-left: 100%;
  }
  .col-lg-offset-11 {
    margin-left: 91.66666667%;
  }
  .col-lg-offset-10 {
    margin-left: 83.33333333%;
  }
  .col-lg-offset-9 {
    margin-left: 75%;
  }
  .col-lg-offset-8 {
    margin-left: 66.66666667%;
  }
  .col-lg-offset-7 {
    margin-left: 58.33333333%;
  }
  .col-lg-offset-6 {
    margin-left: 50%;
  }
  .col-lg-offset-5 {
    margin-left: 41.66666667%;
  }
  .col-lg-offset-4 {
    margin-left: 33.33333333%;
  }
  .col-lg-offset-3 {
    margin-left: 25%;
  }
  .col-lg-offset-2 {
    margin-left: 16.66666667%;
  }
  .col-lg-offset-1 {
    margin-left: 8.33333333%;
  }
  .col-lg-offset-0 {
    margin-left: 0%;
  }
}
table {
  background-color: transparent;
}
caption {
  padding-top: 8px;
  padding-bottom: 8px;
  color: #777777;
  text-align: left;
}
th {
  text-align: left;
}
.table {
  width: 100%;
  max-width: 100%;
  margin-bottom: 18px;
}
.table > thead > tr > th,
.table > tbody > tr > th,
.table > tfoot > tr > th,
.table > thead > tr > td,
.table > tbody > tr > td,
.table > tfoot > tr > td {
  padding: 8px;
  line-height: 1.42857143;
  vertical-align: top;
  border-top: 1px solid #ddd;
}
.table > thead > tr > th {
  vertical-align: bottom;
  border-bottom: 2px solid #ddd;
}
.table > caption + thead > tr:first-child > th,
.table > colgroup + thead > tr:first-child > th,
.table > thead:first-child > tr:first-child > th,
.table > caption + thead > tr:first-child > td,
.table > colgroup + thead > tr:first-child > td,
.table > thead:first-child > tr:first-child > td {
  border-top: 0;
}
.table > tbody + tbody {
  border-top: 2px solid #ddd;
}
.table .table {
  background-color: #fff;
}
.table-condensed > thead > tr > th,
.table-condensed > tbody > tr > th,
.table-condensed > tfoot > tr > th,
.table-condensed > thead > tr > td,
.table-condensed > tbody > tr > td,
.table-condensed > tfoot > tr > td {
  padding: 5px;
}
.table-bordered {
  border: 1px solid #ddd;
}
.table-bordered > thead > tr > th,
.table-bordered > tbody > tr > th,
.table-bordered > tfoot > tr > th,
.table-bordered > thead > tr > td,
.table-bordered > tbody > tr > td,
.table-bordered > tfoot > tr > td {
  border: 1px solid #ddd;
}
.table-bordered > thead > tr > th,
.table-bordered > thead > tr > td {
  border-bottom-width: 2px;
}
.table-striped > tbody > tr:nth-of-type(odd) {
  background-color: #f9f9f9;
}
.table-hover > tbody > tr:hover {
  background-color: #f5f5f5;
}
table col[class*="col-"] {
  position: static;
  float: none;
  display: table-column;
}
table td[class*="col-"],
table th[class*="col-"] {
  position: static;
  float: none;
  display: table-cell;
}
.table > thead > tr > td.active,
.table > tbody > tr > td.active,
.table > tfoot > tr > td.active,
.table > thead > tr > th.active,
.table > tbody > tr > th.active,
.table > tfoot > tr > th.active,
.table > thead > tr.active > td,
.table > tbody > tr.active > td,
.table > tfoot > tr.active > td,
.table > thead > tr.active > th,
.table > tbody > tr.active > th,
.table > tfoot > tr.active > th {
  background-color: #f5f5f5;
}
.table-hover > tbody > tr > td.active:hover,
.table-hover > tbody > tr > th.active:hover,
.table-hover > tbody > tr.active:hover > td,
.table-hover > tbody > tr:hover > .active,
.table-hover > tbody > tr.active:hover > th {
  background-color: #e8e8e8;
}
.table > thead > tr > td.success,
.table > tbody > tr > td.success,
.table > tfoot > tr > td.success,
.table > thead > tr > th.success,
.table > tbody > tr > th.success,
.table > tfoot > tr > th.success,
.table > thead > tr.success > td,
.table > tbody > tr.success > td,
.table > tfoot > tr.success > td,
.table > thead > tr.success > th,
.table > tbody > tr.success > th,
.table > tfoot > tr.success > th {
  background-color: #dff0d8;
}
.table-hover > tbody > tr > td.success:hover,
.table-hover > tbody > tr > th.success:hover,
.table-hover > tbody > tr.success:hover > td,
.table-hover > tbody > tr:hover > .success,
.table-hover > tbody > tr.success:hover > th {
  background-color: #d0e9c6;
}
.table > thead > tr > td.info,
.table > tbody > tr > td.info,
.table > tfoot > tr > td.info,
.table > thead > tr > th.info,
.table > tbody > tr > th.info,
.table > tfoot > tr > th.info,
.table > thead > tr.info > td,
.table > tbody > tr.info > td,
.table > tfoot > tr.info > td,
.table > thead > tr.info > th,
.table > tbody > tr.info > th,
.table > tfoot > tr.info > th {
  background-color: #d9edf7;
}
.table-hover > tbody > tr > td.info:hover,
.table-hover > tbody > tr > th.info:hover,
.table-hover > tbody > tr.info:hover > td,
.table-hover > tbody > tr:hover > .info,
.table-hover > tbody > tr.info:hover > th {
  background-color: #c4e3f3;
}
.table > thead > tr > td.warning,
.table > tbody > tr > td.warning,
.table > tfoot > tr > td.warning,
.table > thead > tr > th.warning,
.table > tbody > tr > th.warning,
.table > tfoot > tr > th.warning,
.table > thead > tr.warning > td,
.table > tbody > tr.warning > td,
.table > tfoot > tr.warning > td,
.table > thead > tr.warning > th,
.table > tbody > tr.warning > th,
.table > tfoot > tr.warning > th {
  background-color: #fcf8e3;
}
.table-hover > tbody > tr > td.warning:hover,
.table-hover > tbody > tr > th.warning:hover,
.table-hover > tbody > tr.warning:hover > td,
.table-hover > tbody > tr:hover > .warning,
.table-hover > tbody > tr.warning:hover > th {
  background-color: #faf2cc;
}
.table > thead > tr > td.danger,
.table > tbody > tr > td.danger,
.table > tfoot > tr > td.danger,
.table > thead > tr > th.danger,
.table > tbody > tr > th.danger,
.table > tfoot > tr > th.danger,
.table > thead > tr.danger > td,
.table > tbody > tr.danger > td,
.table > tfoot > tr.danger > td,
.table > thead > tr.danger > th,
.table > tbody > tr.danger > th,
.table > tfoot > tr.danger > th {
  background-color: #f2dede;
}
.table-hover > tbody > tr > td.danger:hover,
.table-hover > tbody > tr > th.danger:hover,
.table-hover > tbody > tr.danger:hover > td,
.table-hover > tbody > tr:hover > .danger,
.table-hover > tbody > tr.danger:hover > th {
  background-color: #ebcccc;
}
.table-responsive {
  overflow-x: auto;
  min-height: 0.01%;
}
@media screen and (max-width: 767px) {
  .table-responsive {
    width: 100%;
    margin-bottom: 13.5px;
    overflow-y: hidden;
    -ms-overflow-style: -ms-autohiding-scrollbar;
    border: 1px solid #ddd;
  }
  .table-responsive > .table {
    margin-bottom: 0;
  }
  .table-responsive > .table > thead > tr > th,
  .table-responsive > .table > tbody > tr > th,
  .table-responsive > .table > tfoot > tr > th,
  .table-responsive > .table > thead > tr > td,
  .table-responsive > .table > tbody > tr > td,
  .table-responsive > .table > tfoot > tr > td {
    white-space: nowrap;
  }
  .table-responsive > .table-bordered {
    border: 0;
  }
  .table-responsive > .table-bordered > thead > tr > th:first-child,
  .table-responsive > .table-bordered > tbody > tr > th:first-child,
  .table-responsive > .table-bordered > tfoot > tr > th:first-child,
  .table-responsive > .table-bordered > thead > tr > td:first-child,
  .table-responsive > .table-bordered > tbody > tr > td:first-child,
  .table-responsive > .table-bordered > tfoot > tr > td:first-child {
    border-left: 0;
  }
  .table-responsive > .table-bordered > thead > tr > th:last-child,
  .table-responsive > .table-bordered > tbody > tr > th:last-child,
  .table-responsive > .table-bordered > tfoot > tr > th:last-child,
  .table-responsive > .table-bordered > thead > tr > td:last-child,
  .table-responsive > .table-bordered > tbody > tr > td:last-child,
  .table-responsive > .table-bordered > tfoot > tr > td:last-child {
    border-right: 0;
  }
  .table-responsive > .table-bordered > tbody > tr:last-child > th,
  .table-responsive > .table-bordered > tfoot > tr:last-child > th,
  .table-responsive > .table-bordered > tbody > tr:last-child > td,
  .table-responsive > .table-bordered > tfoot > tr:last-child > td {
    border-bottom: 0;
  }
}
fieldset {
  padding: 0;
  margin: 0;
  border: 0;
  min-width: 0;
}
legend {
  display: block;
  width: 100%;
  padding: 0;
  margin-bottom: 18px;
  font-size: 19.5px;
  line-height: inherit;
  color: #333333;
  border: 0;
  border-bottom: 1px solid #e5e5e5;
}
label {
  display: inline-block;
  max-width: 100%;
  margin-bottom: 5px;
  font-weight: bold;
}
input[type="search"] {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
input[type="radio"],
input[type="checkbox"] {
  margin: 4px 0 0;
  margin-top: 1px \9;
  line-height: normal;
}
input[type="file"] {
  display: block;
}
input[type="range"] {
  display: block;
  width: 100%;
}
select[multiple],
select[size] {
  height: auto;
}
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
output {
  display: block;
  padding-top: 7px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #555555;
}
.form-control {
  display: block;
  width: 100%;
  height: 32px;
  padding: 6px 12px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #555555;
  background-color: #fff;
  background-image: none;
  border: 1px solid #ccc;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
}
.form-control:focus {
  border-color: #66afe9;
  outline: 0;
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
}
.form-control::-moz-placeholder {
  color: #999;
  opacity: 1;
}
.form-control:-ms-input-placeholder {
  color: #999;
}
.form-control::-webkit-input-placeholder {
  color: #999;
}
.form-control::-ms-expand {
  border: 0;
  background-color: transparent;
}
.form-control[disabled],
.form-control[readonly],
fieldset[disabled] .form-control {
  background-color: #eeeeee;
  opacity: 1;
}
.form-control[disabled],
fieldset[disabled] .form-control {
  cursor: not-allowed;
}
textarea.form-control {
  height: auto;
}
input[type="search"] {
  -webkit-appearance: none;
}
@media screen and (-webkit-min-device-pixel-ratio: 0) {
  input[type="date"].form-control,
  input[type="time"].form-control,
  input[type="datetime-local"].form-control,
  input[type="month"].form-control {
    line-height: 32px;
  }
  input[type="date"].input-sm,
  input[type="time"].input-sm,
  input[type="datetime-local"].input-sm,
  input[type="month"].input-sm,
  .input-group-sm input[type="date"],
  .input-group-sm input[type="time"],
  .input-group-sm input[type="datetime-local"],
  .input-group-sm input[type="month"] {
    line-height: 30px;
  }
  input[type="date"].input-lg,
  input[type="time"].input-lg,
  input[type="datetime-local"].input-lg,
  input[type="month"].input-lg,
  .input-group-lg input[type="date"],
  .input-group-lg input[type="time"],
  .input-group-lg input[type="datetime-local"],
  .input-group-lg input[type="month"] {
    line-height: 45px;
  }
}
.form-group {
  margin-bottom: 15px;
}
.radio,
.checkbox {
  position: relative;
  display: block;
  margin-top: 10px;
  margin-bottom: 10px;
}
.radio label,
.checkbox label {
  min-height: 18px;
  padding-left: 20px;
  margin-bottom: 0;
  font-weight: normal;
  cursor: pointer;
}
.radio input[type="radio"],
.radio-inline input[type="radio"],
.checkbox input[type="checkbox"],
.checkbox-inline input[type="checkbox"] {
  position: absolute;
  margin-left: -20px;
  margin-top: 4px \9;
}
.radio + .radio,
.checkbox + .checkbox {
  margin-top: -5px;
}
.radio-inline,
.checkbox-inline {
  position: relative;
  display: inline-block;
  padding-left: 20px;
  margin-bottom: 0;
  vertical-align: middle;
  font-weight: normal;
  cursor: pointer;
}
.radio-inline + .radio-inline,
.checkbox-inline + .checkbox-inline {
  margin-top: 0;
  margin-left: 10px;
}
input[type="radio"][disabled],
input[type="checkbox"][disabled],
input[type="radio"].disabled,
input[type="checkbox"].disabled,
fieldset[disabled] input[type="radio"],
fieldset[disabled] input[type="checkbox"] {
  cursor: not-allowed;
}
.radio-inline.disabled,
.checkbox-inline.disabled,
fieldset[disabled] .radio-inline,
fieldset[disabled] .checkbox-inline {
  cursor: not-allowed;
}
.radio.disabled label,
.checkbox.disabled label,
fieldset[disabled] .radio label,
fieldset[disabled] .checkbox label {
  cursor: not-allowed;
}
.form-control-static {
  padding-top: 7px;
  padding-bottom: 7px;
  margin-bottom: 0;
  min-height: 31px;
}
.form-control-static.input-lg,
.form-control-static.input-sm {
  padding-left: 0;
  padding-right: 0;
}
.input-sm {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
select.input-sm {
  height: 30px;
  line-height: 30px;
}
textarea.input-sm,
select[multiple].input-sm {
  height: auto;
}
.form-group-sm .form-control {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
.form-group-sm select.form-control {
  height: 30px;
  line-height: 30px;
}
.form-group-sm textarea.form-control,
.form-group-sm select[multiple].form-control {
  height: auto;
}
.form-group-sm .form-control-static {
  height: 30px;
  min-height: 30px;
  padding: 6px 10px;
  font-size: 12px;
  line-height: 1.5;
}
.input-lg {
  height: 45px;
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
select.input-lg {
  height: 45px;
  line-height: 45px;
}
textarea.input-lg,
select[multiple].input-lg {
  height: auto;
}
.form-group-lg .form-control {
  height: 45px;
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
.form-group-lg select.form-control {
  height: 45px;
  line-height: 45px;
}
.form-group-lg textarea.form-control,
.form-group-lg select[multiple].form-control {
  height: auto;
}
.form-group-lg .form-control-static {
  height: 45px;
  min-height: 35px;
  padding: 11px 16px;
  font-size: 17px;
  line-height: 1.3333333;
}
.has-feedback {
  position: relative;
}
.has-feedback .form-control {
  padding-right: 40px;
}
.form-control-feedback {
  position: absolute;
  top: 0;
  right: 0;
  z-index: 2;
  display: block;
  width: 32px;
  height: 32px;
  line-height: 32px;
  text-align: center;
  pointer-events: none;
}
.input-lg + .form-control-feedback,
.input-group-lg + .form-control-feedback,
.form-group-lg .form-control + .form-control-feedback {
  width: 45px;
  height: 45px;
  line-height: 45px;
}
.input-sm + .form-control-feedback,
.input-group-sm + .form-control-feedback,
.form-group-sm .form-control + .form-control-feedback {
  width: 30px;
  height: 30px;
  line-height: 30px;
}
.has-success .help-block,
.has-success .control-label,
.has-success .radio,
.has-success .checkbox,
.has-success .radio-inline,
.has-success .checkbox-inline,
.has-success.radio label,
.has-success.checkbox label,
.has-success.radio-inline label,
.has-success.checkbox-inline label {
  color: #3c763d;
}
.has-success .form-control {
  border-color: #3c763d;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-success .form-control:focus {
  border-color: #2b542c;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
}
.has-success .input-group-addon {
  color: #3c763d;
  border-color: #3c763d;
  background-color: #dff0d8;
}
.has-success .form-control-feedback {
  color: #3c763d;
}
.has-warning .help-block,
.has-warning .control-label,
.has-warning .radio,
.has-warning .checkbox,
.has-warning .radio-inline,
.has-warning .checkbox-inline,
.has-warning.radio label,
.has-warning.checkbox label,
.has-warning.radio-inline label,
.has-warning.checkbox-inline label {
  color: #8a6d3b;
}
.has-warning .form-control {
  border-color: #8a6d3b;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-warning .form-control:focus {
  border-color: #66512c;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
}
.has-warning .input-group-addon {
  color: #8a6d3b;
  border-color: #8a6d3b;
  background-color: #fcf8e3;
}
.has-warning .form-control-feedback {
  color: #8a6d3b;
}
.has-error .help-block,
.has-error .control-label,
.has-error .radio,
.has-error .checkbox,
.has-error .radio-inline,
.has-error .checkbox-inline,
.has-error.radio label,
.has-error.checkbox label,
.has-error.radio-inline label,
.has-error.checkbox-inline label {
  color: #a94442;
}
.has-error .form-control {
  border-color: #a94442;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-error .form-control:focus {
  border-color: #843534;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
}
.has-error .input-group-addon {
  color: #a94442;
  border-color: #a94442;
  background-color: #f2dede;
}
.has-error .form-control-feedback {
  color: #a94442;
}
.has-feedback label ~ .form-control-feedback {
  top: 23px;
}
.has-feedback label.sr-only ~ .form-control-feedback {
  top: 0;
}
.help-block {
  display: block;
  margin-top: 5px;
  margin-bottom: 10px;
  color: #404040;
}
@media (min-width: 768px) {
  .form-inline .form-group {
    display: inline-block;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .form-control {
    display: inline-block;
    width: auto;
    vertical-align: middle;
  }
  .form-inline .form-control-static {
    display: inline-block;
  }
  .form-inline .input-group {
    display: inline-table;
    vertical-align: middle;
  }
  .form-inline .input-group .input-group-addon,
  .form-inline .input-group .input-group-btn,
  .form-inline .input-group .form-control {
    width: auto;
  }
  .form-inline .input-group > .form-control {
    width: 100%;
  }
  .form-inline .control-label {
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .radio,
  .form-inline .checkbox {
    display: inline-block;
    margin-top: 0;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .form-inline .radio label,
  .form-inline .checkbox label {
    padding-left: 0;
  }
  .form-inline .radio input[type="radio"],
  .form-inline .checkbox input[type="checkbox"] {
    position: relative;
    margin-left: 0;
  }
  .form-inline .has-feedback .form-control-feedback {
    top: 0;
  }
}
.form-horizontal .radio,
.form-horizontal .checkbox,
.form-horizontal .radio-inline,
.form-horizontal .checkbox-inline {
  margin-top: 0;
  margin-bottom: 0;
  padding-top: 7px;
}
.form-horizontal .radio,
.form-horizontal .checkbox {
  min-height: 25px;
}
.form-horizontal .form-group {
  margin-left: 0px;
  margin-right: 0px;
}
@media (min-width: 768px) {
  .form-horizontal .control-label {
    text-align: right;
    margin-bottom: 0;
    padding-top: 7px;
  }
}
.form-horizontal .has-feedback .form-control-feedback {
  right: 0px;
}
@media (min-width: 768px) {
  .form-horizontal .form-group-lg .control-label {
    padding-top: 11px;
    font-size: 17px;
  }
}
@media (min-width: 768px) {
  .form-horizontal .form-group-sm .control-label {
    padding-top: 6px;
    font-size: 12px;
  }
}
.btn {
  display: inline-block;
  margin-bottom: 0;
  font-weight: normal;
  text-align: center;
  vertical-align: middle;
  touch-action: manipulation;
  cursor: pointer;
  background-image: none;
  border: 1px solid transparent;
  white-space: nowrap;
  padding: 6px 12px;
  font-size: 13px;
  line-height: 1.42857143;
  border-radius: 2px;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.btn:focus,
.btn:active:focus,
.btn.active:focus,
.btn.focus,
.btn:active.focus,
.btn.active.focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
.btn:hover,
.btn:focus,
.btn.focus {
  color: #333;
  text-decoration: none;
}
.btn:active,
.btn.active {
  outline: 0;
  background-image: none;
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn.disabled,
.btn[disabled],
fieldset[disabled] .btn {
  cursor: not-allowed;
  opacity: 0.65;
  filter: alpha(opacity=65);
  -webkit-box-shadow: none;
  box-shadow: none;
}
a.btn.disabled,
fieldset[disabled] a.btn {
  pointer-events: none;
}
.btn-default {
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
.btn-default:focus,
.btn-default.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
.btn-default:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.btn-default:active:hover,
.btn-default.active:hover,
.open > .dropdown-toggle.btn-default:hover,
.btn-default:active:focus,
.btn-default.active:focus,
.open > .dropdown-toggle.btn-default:focus,
.btn-default:active.focus,
.btn-default.active.focus,
.open > .dropdown-toggle.btn-default.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
  background-image: none;
}
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled.focus,
.btn-default[disabled].focus,
fieldset[disabled] .btn-default.focus {
  background-color: #fff;
  border-color: #ccc;
}
.btn-default .badge {
  color: #fff;
  background-color: #333;
}
.btn-primary {
  color: #fff;
  background-color: #337ab7;
  border-color: #2e6da4;
}
.btn-primary:focus,
.btn-primary.focus {
  color: #fff;
  background-color: #286090;
  border-color: #122b40;
}
.btn-primary:hover {
  color: #fff;
  background-color: #286090;
  border-color: #204d74;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
  color: #fff;
  background-color: #286090;
  border-color: #204d74;
}
.btn-primary:active:hover,
.btn-primary.active:hover,
.open > .dropdown-toggle.btn-primary:hover,
.btn-primary:active:focus,
.btn-primary.active:focus,
.open > .dropdown-toggle.btn-primary:focus,
.btn-primary:active.focus,
.btn-primary.active.focus,
.open > .dropdown-toggle.btn-primary.focus {
  color: #fff;
  background-color: #204d74;
  border-color: #122b40;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
  background-image: none;
}
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled.focus,
.btn-primary[disabled].focus,
fieldset[disabled] .btn-primary.focus {
  background-color: #337ab7;
  border-color: #2e6da4;
}
.btn-primary .badge {
  color: #337ab7;
  background-color: #fff;
}
.btn-success {
  color: #fff;
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.btn-success:focus,
.btn-success.focus {
  color: #fff;
  background-color: #449d44;
  border-color: #255625;
}
.btn-success:hover {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.btn-success:active:hover,
.btn-success.active:hover,
.open > .dropdown-toggle.btn-success:hover,
.btn-success:active:focus,
.btn-success.active:focus,
.open > .dropdown-toggle.btn-success:focus,
.btn-success:active.focus,
.btn-success.active.focus,
.open > .dropdown-toggle.btn-success.focus {
  color: #fff;
  background-color: #398439;
  border-color: #255625;
}
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
  background-image: none;
}
.btn-success.disabled:hover,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
.btn-success.disabled.focus,
.btn-success[disabled].focus,
fieldset[disabled] .btn-success.focus {
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.btn-success .badge {
  color: #5cb85c;
  background-color: #fff;
}
.btn-info {
  color: #fff;
  background-color: #5bc0de;
  border-color: #46b8da;
}
.btn-info:focus,
.btn-info.focus {
  color: #fff;
  background-color: #31b0d5;
  border-color: #1b6d85;
}
.btn-info:hover {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.btn-info:active:hover,
.btn-info.active:hover,
.open > .dropdown-toggle.btn-info:hover,
.btn-info:active:focus,
.btn-info.active:focus,
.open > .dropdown-toggle.btn-info:focus,
.btn-info:active.focus,
.btn-info.active.focus,
.open > .dropdown-toggle.btn-info.focus {
  color: #fff;
  background-color: #269abc;
  border-color: #1b6d85;
}
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
  background-image: none;
}
.btn-info.disabled:hover,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
.btn-info.disabled.focus,
.btn-info[disabled].focus,
fieldset[disabled] .btn-info.focus {
  background-color: #5bc0de;
  border-color: #46b8da;
}
.btn-info .badge {
  color: #5bc0de;
  background-color: #fff;
}
.btn-warning {
  color: #fff;
  background-color: #f0ad4e;
  border-color: #eea236;
}
.btn-warning:focus,
.btn-warning.focus {
  color: #fff;
  background-color: #ec971f;
  border-color: #985f0d;
}
.btn-warning:hover {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.btn-warning:active,
.btn-warning.active,
.open > .dropdown-toggle.btn-warning {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.btn-warning:active:hover,
.btn-warning.active:hover,
.open > .dropdown-toggle.btn-warning:hover,
.btn-warning:active:focus,
.btn-warning.active:focus,
.open > .dropdown-toggle.btn-warning:focus,
.btn-warning:active.focus,
.btn-warning.active.focus,
.open > .dropdown-toggle.btn-warning.focus {
  color: #fff;
  background-color: #d58512;
  border-color: #985f0d;
}
.btn-warning:active,
.btn-warning.active,
.open > .dropdown-toggle.btn-warning {
  background-image: none;
}
.btn-warning.disabled:hover,
.btn-warning[disabled]:hover,
fieldset[disabled] .btn-warning:hover,
.btn-warning.disabled:focus,
.btn-warning[disabled]:focus,
fieldset[disabled] .btn-warning:focus,
.btn-warning.disabled.focus,
.btn-warning[disabled].focus,
fieldset[disabled] .btn-warning.focus {
  background-color: #f0ad4e;
  border-color: #eea236;
}
.btn-warning .badge {
  color: #f0ad4e;
  background-color: #fff;
}
.btn-danger {
  color: #fff;
  background-color: #d9534f;
  border-color: #d43f3a;
}
.btn-danger:focus,
.btn-danger.focus {
  color: #fff;
  background-color: #c9302c;
  border-color: #761c19;
}
.btn-danger:hover {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.btn-danger:active,
.btn-danger.active,
.open > .dropdown-toggle.btn-danger {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.btn-danger:active:hover,
.btn-danger.active:hover,
.open > .dropdown-toggle.btn-danger:hover,
.btn-danger:active:focus,
.btn-danger.active:focus,
.open > .dropdown-toggle.btn-danger:focus,
.btn-danger:active.focus,
.btn-danger.active.focus,
.open > .dropdown-toggle.btn-danger.focus {
  color: #fff;
  background-color: #ac2925;
  border-color: #761c19;
}
.btn-danger:active,
.btn-danger.active,
.open > .dropdown-toggle.btn-danger {
  background-image: none;
}
.btn-danger.disabled:hover,
.btn-danger[disabled]:hover,
fieldset[disabled] .btn-danger:hover,
.btn-danger.disabled:focus,
.btn-danger[disabled]:focus,
fieldset[disabled] .btn-danger:focus,
.btn-danger.disabled.focus,
.btn-danger[disabled].focus,
fieldset[disabled] .btn-danger.focus {
  background-color: #d9534f;
  border-color: #d43f3a;
}
.btn-danger .badge {
  color: #d9534f;
  background-color: #fff;
}
.btn-link {
  color: #337ab7;
  font-weight: normal;
  border-radius: 0;
}
.btn-link,
.btn-link:active,
.btn-link.active,
.btn-link[disabled],
fieldset[disabled] .btn-link {
  background-color: transparent;
  -webkit-box-shadow: none;
  box-shadow: none;
}
.btn-link,
.btn-link:hover,
.btn-link:focus,
.btn-link:active {
  border-color: transparent;
}
.btn-link:hover,
.btn-link:focus {
  color: #23527c;
  text-decoration: underline;
  background-color: transparent;
}
.btn-link[disabled]:hover,
fieldset[disabled] .btn-link:hover,
.btn-link[disabled]:focus,
fieldset[disabled] .btn-link:focus {
  color: #777777;
  text-decoration: none;
}
.btn-lg,
.btn-group-lg > .btn {
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
.btn-sm,
.btn-group-sm > .btn {
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
.btn-xs,
.btn-group-xs > .btn {
  padding: 1px 5px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
.btn-block {
  display: block;
  width: 100%;
}
.btn-block + .btn-block {
  margin-top: 5px;
}
input[type="submit"].btn-block,
input[type="reset"].btn-block,
input[type="button"].btn-block {
  width: 100%;
}
.fade {
  opacity: 0;
  -webkit-transition: opacity 0.15s linear;
  -o-transition: opacity 0.15s linear;
  transition: opacity 0.15s linear;
}
.fade.in {
  opacity: 1;
}
.collapse {
  display: none;
}
.collapse.in {
  display: block;
}
tr.collapse.in {
  display: table-row;
}
tbody.collapse.in {
  display: table-row-group;
}
.collapsing {
  position: relative;
  height: 0;
  overflow: hidden;
  -webkit-transition-property: height, visibility;
  transition-property: height, visibility;
  -webkit-transition-duration: 0.35s;
  transition-duration: 0.35s;
  -webkit-transition-timing-function: ease;
  transition-timing-function: ease;
}
.caret {
  display: inline-block;
  width: 0;
  height: 0;
  margin-left: 2px;
  vertical-align: middle;
  border-top: 4px dashed;
  border-top: 4px solid \9;
  border-right: 4px solid transparent;
  border-left: 4px solid transparent;
}
.dropup,
.dropdown {
  position: relative;
}
.dropdown-toggle:focus {
  outline: 0;
}
.dropdown-menu {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 1000;
  display: none;
  float: left;
  min-width: 160px;
  padding: 5px 0;
  margin: 2px 0 0;
  list-style: none;
  font-size: 13px;
  text-align: left;
  background-color: #fff;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.15);
  border-radius: 2px;
  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
  background-clip: padding-box;
}
.dropdown-menu.pull-right {
  right: 0;
  left: auto;
}
.dropdown-menu .divider {
  height: 1px;
  margin: 8px 0;
  overflow: hidden;
  background-color: #e5e5e5;
}
.dropdown-menu > li > a {
  display: block;
  padding: 3px 20px;
  clear: both;
  font-weight: normal;
  line-height: 1.42857143;
  color: #333333;
  white-space: nowrap;
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
  text-decoration: none;
  color: #262626;
  background-color: #f5f5f5;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
  color: #fff;
  text-decoration: none;
  outline: 0;
  background-color: #337ab7;
}
.dropdown-menu > .disabled > a,
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
  color: #777777;
}
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
  text-decoration: none;
  background-color: transparent;
  background-image: none;
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  cursor: not-allowed;
}
.open > .dropdown-menu {
  display: block;
}
.open > a {
  outline: 0;
}
.dropdown-menu-right {
  left: auto;
  right: 0;
}
.dropdown-menu-left {
  left: 0;
  right: auto;
}
.dropdown-header {
  display: block;
  padding: 3px 20px;
  font-size: 12px;
  line-height: 1.42857143;
  color: #777777;
  white-space: nowrap;
}
.dropdown-backdrop {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  top: 0;
  z-index: 990;
}
.pull-right > .dropdown-menu {
  right: 0;
  left: auto;
}
.dropup .caret,
.navbar-fixed-bottom .dropdown .caret {
  border-top: 0;
  border-bottom: 4px dashed;
  border-bottom: 4px solid \9;
  content: "";
}
.dropup .dropdown-menu,
.navbar-fixed-bottom .dropdown .dropdown-menu {
  top: auto;
  bottom: 100%;
  margin-bottom: 2px;
}
@media (min-width: 541px) {
  .navbar-right .dropdown-menu {
    left: auto;
    right: 0;
  }
  .navbar-right .dropdown-menu-left {
    left: 0;
    right: auto;
  }
}
.btn-group,
.btn-group-vertical {
  position: relative;
  display: inline-block;
  vertical-align: middle;
}
.btn-group > .btn,
.btn-group-vertical > .btn {
  position: relative;
  float: left;
}
.btn-group > .btn:hover,
.btn-group-vertical > .btn:hover,
.btn-group > .btn:focus,
.btn-group-vertical > .btn:focus,
.btn-group > .btn:active,
.btn-group-vertical > .btn:active,
.btn-group > .btn.active,
.btn-group-vertical > .btn.active {
  z-index: 2;
}
.btn-group .btn + .btn,
.btn-group .btn + .btn-group,
.btn-group .btn-group + .btn,
.btn-group .btn-group + .btn-group {
  margin-left: -1px;
}
.btn-toolbar {
  margin-left: -5px;
}
.btn-toolbar .btn,
.btn-toolbar .btn-group,
.btn-toolbar .input-group {
  float: left;
}
.btn-toolbar > .btn,
.btn-toolbar > .btn-group,
.btn-toolbar > .input-group {
  margin-left: 5px;
}
.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
  border-radius: 0;
}
.btn-group > .btn:first-child {
  margin-left: 0;
}
.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.btn-group > .btn:last-child:not(:first-child),
.btn-group > .dropdown-toggle:not(:first-child) {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.btn-group > .btn-group {
  float: left;
}
.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
  border-radius: 0;
}
.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.btn-group .dropdown-toggle:active,
.btn-group.open .dropdown-toggle {
  outline: 0;
}
.btn-group > .btn + .dropdown-toggle {
  padding-left: 8px;
  padding-right: 8px;
}
.btn-group > .btn-lg + .dropdown-toggle {
  padding-left: 12px;
  padding-right: 12px;
}
.btn-group.open .dropdown-toggle {
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn-group.open .dropdown-toggle.btn-link {
  -webkit-box-shadow: none;
  box-shadow: none;
}
.btn .caret {
  margin-left: 0;
}
.btn-lg .caret {
  border-width: 5px 5px 0;
  border-bottom-width: 0;
}
.dropup .btn-lg .caret {
  border-width: 0 5px 5px;
}
.btn-group-vertical > .btn,
.btn-group-vertical > .btn-group,
.btn-group-vertical > .btn-group > .btn {
  display: block;
  float: none;
  width: 100%;
  max-width: 100%;
}
.btn-group-vertical > .btn-group > .btn {
  float: none;
}
.btn-group-vertical > .btn + .btn,
.btn-group-vertical > .btn + .btn-group,
.btn-group-vertical > .btn-group + .btn,
.btn-group-vertical > .btn-group + .btn-group {
  margin-top: -1px;
  margin-left: 0;
}
.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
  border-radius: 0;
}
.btn-group-vertical > .btn:first-child:not(:last-child) {
  border-top-right-radius: 2px;
  border-top-left-radius: 2px;
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.btn-group-vertical > .btn:last-child:not(:first-child) {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
  border-bottom-right-radius: 2px;
  border-bottom-left-radius: 2px;
}
.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
  border-radius: 0;
}
.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.btn-group-justified {
  display: table;
  width: 100%;
  table-layout: fixed;
  border-collapse: separate;
}
.btn-group-justified > .btn,
.btn-group-justified > .btn-group {
  float: none;
  display: table-cell;
  width: 1%;
}
.btn-group-justified > .btn-group .btn {
  width: 100%;
}
.btn-group-justified > .btn-group .dropdown-menu {
  left: auto;
}
[data-toggle="buttons"] > .btn input[type="radio"],
[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
[data-toggle="buttons"] > .btn input[type="checkbox"],
[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
  position: absolute;
  clip: rect(0, 0, 0, 0);
  pointer-events: none;
}
.input-group {
  position: relative;
  display: table;
  border-collapse: separate;
}
.input-group[class*="col-"] {
  float: none;
  padding-left: 0;
  padding-right: 0;
}
.input-group .form-control {
  position: relative;
  z-index: 2;
  float: left;
  width: 100%;
  margin-bottom: 0;
}
.input-group .form-control:focus {
  z-index: 3;
}
.input-group-lg > .form-control,
.input-group-lg > .input-group-addon,
.input-group-lg > .input-group-btn > .btn {
  height: 45px;
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
  border-radius: 3px;
}
select.input-group-lg > .form-control,
select.input-group-lg > .input-group-addon,
select.input-group-lg > .input-group-btn > .btn {
  height: 45px;
  line-height: 45px;
}
textarea.input-group-lg > .form-control,
textarea.input-group-lg > .input-group-addon,
textarea.input-group-lg > .input-group-btn > .btn,
select[multiple].input-group-lg > .form-control,
select[multiple].input-group-lg > .input-group-addon,
select[multiple].input-group-lg > .input-group-btn > .btn {
  height: auto;
}
.input-group-sm > .form-control,
.input-group-sm > .input-group-addon,
.input-group-sm > .input-group-btn > .btn {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
}
select.input-group-sm > .form-control,
select.input-group-sm > .input-group-addon,
select.input-group-sm > .input-group-btn > .btn {
  height: 30px;
  line-height: 30px;
}
textarea.input-group-sm > .form-control,
textarea.input-group-sm > .input-group-addon,
textarea.input-group-sm > .input-group-btn > .btn,
select[multiple].input-group-sm > .form-control,
select[multiple].input-group-sm > .input-group-addon,
select[multiple].input-group-sm > .input-group-btn > .btn {
  height: auto;
}
.input-group-addon,
.input-group-btn,
.input-group .form-control {
  display: table-cell;
}
.input-group-addon:not(:first-child):not(:last-child),
.input-group-btn:not(:first-child):not(:last-child),
.input-group .form-control:not(:first-child):not(:last-child) {
  border-radius: 0;
}
.input-group-addon,
.input-group-btn {
  width: 1%;
  white-space: nowrap;
  vertical-align: middle;
}
.input-group-addon {
  padding: 6px 12px;
  font-size: 13px;
  font-weight: normal;
  line-height: 1;
  color: #555555;
  text-align: center;
  background-color: #eeeeee;
  border: 1px solid #ccc;
  border-radius: 2px;
}
.input-group-addon.input-sm {
  padding: 5px 10px;
  font-size: 12px;
  border-radius: 1px;
}
.input-group-addon.input-lg {
  padding: 10px 16px;
  font-size: 17px;
  border-radius: 3px;
}
.input-group-addon input[type="radio"],
.input-group-addon input[type="checkbox"] {
  margin-top: 0;
}
.input-group .form-control:first-child,
.input-group-addon:first-child,
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group > .btn,
.input-group-btn:first-child > .dropdown-toggle,
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
.input-group-addon:first-child {
  border-right: 0;
}
.input-group .form-control:last-child,
.input-group-addon:last-child,
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group > .btn,
.input-group-btn:last-child > .dropdown-toggle,
.input-group-btn:first-child > .btn:not(:first-child),
.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
.input-group-addon:last-child {
  border-left: 0;
}
.input-group-btn {
  position: relative;
  font-size: 0;
  white-space: nowrap;
}
.input-group-btn > .btn {
  position: relative;
}
.input-group-btn > .btn + .btn {
  margin-left: -1px;
}
.input-group-btn > .btn:hover,
.input-group-btn > .btn:focus,
.input-group-btn > .btn:active {
  z-index: 2;
}
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group {
  margin-right: -1px;
}
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group {
  z-index: 2;
  margin-left: -1px;
}
.nav {
  margin-bottom: 0;
  padding-left: 0;
  list-style: none;
}
.nav > li {
  position: relative;
  display: block;
}
.nav > li > a {
  position: relative;
  display: block;
  padding: 10px 15px;
}
.nav > li > a:hover,
.nav > li > a:focus {
  text-decoration: none;
  background-color: #eeeeee;
}
.nav > li.disabled > a {
  color: #777777;
}
.nav > li.disabled > a:hover,
.nav > li.disabled > a:focus {
  color: #777777;
  text-decoration: none;
  background-color: transparent;
  cursor: not-allowed;
}
.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus {
  background-color: #eeeeee;
  border-color: #337ab7;
}
.nav .nav-divider {
  height: 1px;
  margin: 8px 0;
  overflow: hidden;
  background-color: #e5e5e5;
}
.nav > li > a > img {
  max-width: none;
}
.nav-tabs {
  border-bottom: 1px solid #ddd;
}
.nav-tabs > li {
  float: left;
  margin-bottom: -1px;
}
.nav-tabs > li > a {
  margin-right: 2px;
  line-height: 1.42857143;
  border: 1px solid transparent;
  border-radius: 2px 2px 0 0;
}
.nav-tabs > li > a:hover {
  border-color: #eeeeee #eeeeee #ddd;
}
.nav-tabs > li.active > a,
.nav-tabs > li.active > a:hover,
.nav-tabs > li.active > a:focus {
  color: #555555;
  background-color: #fff;
  border: 1px solid #ddd;
  border-bottom-color: transparent;
  cursor: default;
}
.nav-tabs.nav-justified {
  width: 100%;
  border-bottom: 0;
}
.nav-tabs.nav-justified > li {
  float: none;
}
.nav-tabs.nav-justified > li > a {
  text-align: center;
  margin-bottom: 5px;
}
.nav-tabs.nav-justified > .dropdown .dropdown-menu {
  top: auto;
  left: auto;
}
@media (min-width: 768px) {
  .nav-tabs.nav-justified > li {
    display: table-cell;
    width: 1%;
  }
  .nav-tabs.nav-justified > li > a {
    margin-bottom: 0;
  }
}
.nav-tabs.nav-justified > li > a {
  margin-right: 0;
  border-radius: 2px;
}
.nav-tabs.nav-justified > .active > a,
.nav-tabs.nav-justified > .active > a:hover,
.nav-tabs.nav-justified > .active > a:focus {
  border: 1px solid #ddd;
}
@media (min-width: 768px) {
  .nav-tabs.nav-justified > li > a {
    border-bottom: 1px solid #ddd;
    border-radius: 2px 2px 0 0;
  }
  .nav-tabs.nav-justified > .active > a,
  .nav-tabs.nav-justified > .active > a:hover,
  .nav-tabs.nav-justified > .active > a:focus {
    border-bottom-color: #fff;
  }
}
.nav-pills > li {
  float: left;
}
.nav-pills > li > a {
  border-radius: 2px;
}
.nav-pills > li + li {
  margin-left: 2px;
}
.nav-pills > li.active > a,
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus {
  color: #fff;
  background-color: #337ab7;
}
.nav-stacked > li {
  float: none;
}
.nav-stacked > li + li {
  margin-top: 2px;
  margin-left: 0;
}
.nav-justified {
  width: 100%;
}
.nav-justified > li {
  float: none;
}
.nav-justified > li > a {
  text-align: center;
  margin-bottom: 5px;
}
.nav-justified > .dropdown .dropdown-menu {
  top: auto;
  left: auto;
}
@media (min-width: 768px) {
  .nav-justified > li {
    display: table-cell;
    width: 1%;
  }
  .nav-justified > li > a {
    margin-bottom: 0;
  }
}
.nav-tabs-justified {
  border-bottom: 0;
}
.nav-tabs-justified > li > a {
  margin-right: 0;
  border-radius: 2px;
}
.nav-tabs-justified > .active > a,
.nav-tabs-justified > .active > a:hover,
.nav-tabs-justified > .active > a:focus {
  border: 1px solid #ddd;
}
@media (min-width: 768px) {
  .nav-tabs-justified > li > a {
    border-bottom: 1px solid #ddd;
    border-radius: 2px 2px 0 0;
  }
  .nav-tabs-justified > .active > a,
  .nav-tabs-justified > .active > a:hover,
  .nav-tabs-justified > .active > a:focus {
    border-bottom-color: #fff;
  }
}
.tab-content > .tab-pane {
  display: none;
}
.tab-content > .active {
  display: block;
}
.nav-tabs .dropdown-menu {
  margin-top: -1px;
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.navbar {
  position: relative;
  min-height: 30px;
  margin-bottom: 18px;
  border: 1px solid transparent;
}
@media (min-width: 541px) {
  .navbar {
    border-radius: 2px;
  }
}
@media (min-width: 541px) {
  .navbar-header {
    float: left;
  }
}
.navbar-collapse {
  overflow-x: visible;
  padding-right: 0px;
  padding-left: 0px;
  border-top: 1px solid transparent;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
  -webkit-overflow-scrolling: touch;
}
.navbar-collapse.in {
  overflow-y: auto;
}
@media (min-width: 541px) {
  .navbar-collapse {
    width: auto;
    border-top: 0;
    box-shadow: none;
  }
  .navbar-collapse.collapse {
    display: block !important;
    height: auto !important;
    padding-bottom: 0;
    overflow: visible !important;
  }
  .navbar-collapse.in {
    overflow-y: visible;
  }
  .navbar-fixed-top .navbar-collapse,
  .navbar-static-top .navbar-collapse,
  .navbar-fixed-bottom .navbar-collapse {
    padding-left: 0;
    padding-right: 0;
  }
}
.navbar-fixed-top .navbar-collapse,
.navbar-fixed-bottom .navbar-collapse {
  max-height: 340px;
}
@media (max-device-width: 540px) and (orientation: landscape) {
  .navbar-fixed-top .navbar-collapse,
  .navbar-fixed-bottom .navbar-collapse {
    max-height: 200px;
  }
}
.container > .navbar-header,
.container-fluid > .navbar-header,
.container > .navbar-collapse,
.container-fluid > .navbar-collapse {
  margin-right: 0px;
  margin-left: 0px;
}
@media (min-width: 541px) {
  .container > .navbar-header,
  .container-fluid > .navbar-header,
  .container > .navbar-collapse,
  .container-fluid > .navbar-collapse {
    margin-right: 0;
    margin-left: 0;
  }
}
.navbar-static-top {
  z-index: 1000;
  border-width: 0 0 1px;
}
@media (min-width: 541px) {
  .navbar-static-top {
    border-radius: 0;
  }
}
.navbar-fixed-top,
.navbar-fixed-bottom {
  position: fixed;
  right: 0;
  left: 0;
  z-index: 1030;
}
@media (min-width: 541px) {
  .navbar-fixed-top,
  .navbar-fixed-bottom {
    border-radius: 0;
  }
}
.navbar-fixed-top {
  top: 0;
  border-width: 0 0 1px;
}
.navbar-fixed-bottom {
  bottom: 0;
  margin-bottom: 0;
  border-width: 1px 0 0;
}
.navbar-brand {
  float: left;
  padding: 6px 0px;
  font-size: 17px;
  line-height: 18px;
  height: 30px;
}
.navbar-brand:hover,
.navbar-brand:focus {
  text-decoration: none;
}
.navbar-brand > img {
  display: block;
}
@media (min-width: 541px) {
  .navbar > .container .navbar-brand,
  .navbar > .container-fluid .navbar-brand {
    margin-left: 0px;
  }
}
.navbar-toggle {
  position: relative;
  float: right;
  margin-right: 0px;
  padding: 9px 10px;
  margin-top: -2px;
  margin-bottom: -2px;
  background-color: transparent;
  background-image: none;
  border: 1px solid transparent;
  border-radius: 2px;
}
.navbar-toggle:focus {
  outline: 0;
}
.navbar-toggle .icon-bar {
  display: block;
  width: 22px;
  height: 2px;
  border-radius: 1px;
}
.navbar-toggle .icon-bar + .icon-bar {
  margin-top: 4px;
}
@media (min-width: 541px) {
  .navbar-toggle {
    display: none;
  }
}
.navbar-nav {
  margin: 3px 0px;
}
.navbar-nav > li > a {
  padding-top: 10px;
  padding-bottom: 10px;
  line-height: 18px;
}
@media (max-width: 540px) {
  .navbar-nav .open .dropdown-menu {
    position: static;
    float: none;
    width: auto;
    margin-top: 0;
    background-color: transparent;
    border: 0;
    box-shadow: none;
  }
  .navbar-nav .open .dropdown-menu > li > a,
  .navbar-nav .open .dropdown-menu .dropdown-header {
    padding: 5px 15px 5px 25px;
  }
  .navbar-nav .open .dropdown-menu > li > a {
    line-height: 18px;
  }
  .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-nav .open .dropdown-menu > li > a:focus {
    background-image: none;
  }
}
@media (min-width: 541px) {
  .navbar-nav {
    float: left;
    margin: 0;
  }
  .navbar-nav > li {
    float: left;
  }
  .navbar-nav > li > a {
    padding-top: 6px;
    padding-bottom: 6px;
  }
}
.navbar-form {
  margin-left: 0px;
  margin-right: 0px;
  padding: 10px 0px;
  border-top: 1px solid transparent;
  border-bottom: 1px solid transparent;
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
  margin-top: -1px;
  margin-bottom: -1px;
}
@media (min-width: 768px) {
  .navbar-form .form-group {
    display: inline-block;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .form-control {
    display: inline-block;
    width: auto;
    vertical-align: middle;
  }
  .navbar-form .form-control-static {
    display: inline-block;
  }
  .navbar-form .input-group {
    display: inline-table;
    vertical-align: middle;
  }
  .navbar-form .input-group .input-group-addon,
  .navbar-form .input-group .input-group-btn,
  .navbar-form .input-group .form-control {
    width: auto;
  }
  .navbar-form .input-group > .form-control {
    width: 100%;
  }
  .navbar-form .control-label {
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .radio,
  .navbar-form .checkbox {
    display: inline-block;
    margin-top: 0;
    margin-bottom: 0;
    vertical-align: middle;
  }
  .navbar-form .radio label,
  .navbar-form .checkbox label {
    padding-left: 0;
  }
  .navbar-form .radio input[type="radio"],
  .navbar-form .checkbox input[type="checkbox"] {
    position: relative;
    margin-left: 0;
  }
  .navbar-form .has-feedback .form-control-feedback {
    top: 0;
  }
}
@media (max-width: 540px) {
  .navbar-form .form-group {
    margin-bottom: 5px;
  }
  .navbar-form .form-group:last-child {
    margin-bottom: 0;
  }
}
@media (min-width: 541px) {
  .navbar-form {
    width: auto;
    border: 0;
    margin-left: 0;
    margin-right: 0;
    padding-top: 0;
    padding-bottom: 0;
    -webkit-box-shadow: none;
    box-shadow: none;
  }
}
.navbar-nav > li > .dropdown-menu {
  margin-top: 0;
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
  margin-bottom: 0;
  border-top-right-radius: 2px;
  border-top-left-radius: 2px;
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.navbar-btn {
  margin-top: -1px;
  margin-bottom: -1px;
}
.navbar-btn.btn-sm {
  margin-top: 0px;
  margin-bottom: 0px;
}
.navbar-btn.btn-xs {
  margin-top: 4px;
  margin-bottom: 4px;
}
.navbar-text {
  margin-top: 6px;
  margin-bottom: 6px;
}
@media (min-width: 541px) {
  .navbar-text {
    float: left;
    margin-left: 0px;
    margin-right: 0px;
  }
}
@media (min-width: 541px) {
  .navbar-left {
    float: left !important;
    float: left;
  }
  .navbar-right {
    float: right !important;
    float: right;
    margin-right: 0px;
  }
  .navbar-right ~ .navbar-right {
    margin-right: 0;
  }
}
.navbar-default {
  background-color: #f8f8f8;
  border-color: #e7e7e7;
}
.navbar-default .navbar-brand {
  color: #777;
}
.navbar-default .navbar-brand:hover,
.navbar-default .navbar-brand:focus {
  color: #5e5e5e;
  background-color: transparent;
}
.navbar-default .navbar-text {
  color: #777;
}
.navbar-default .navbar-nav > li > a {
  color: #777;
}
.navbar-default .navbar-nav > li > a:hover,
.navbar-default .navbar-nav > li > a:focus {
  color: #333;
  background-color: transparent;
}
.navbar-default .navbar-nav > .active > a,
.navbar-default .navbar-nav > .active > a:hover,
.navbar-default .navbar-nav > .active > a:focus {
  color: #555;
  background-color: #e7e7e7;
}
.navbar-default .navbar-nav > .disabled > a,
.navbar-default .navbar-nav > .disabled > a:hover,
.navbar-default .navbar-nav > .disabled > a:focus {
  color: #ccc;
  background-color: transparent;
}
.navbar-default .navbar-toggle {
  border-color: #ddd;
}
.navbar-default .navbar-toggle:hover,
.navbar-default .navbar-toggle:focus {
  background-color: #ddd;
}
.navbar-default .navbar-toggle .icon-bar {
  background-color: #888;
}
.navbar-default .navbar-collapse,
.navbar-default .navbar-form {
  border-color: #e7e7e7;
}
.navbar-default .navbar-nav > .open > a,
.navbar-default .navbar-nav > .open > a:hover,
.navbar-default .navbar-nav > .open > a:focus {
  background-color: #e7e7e7;
  color: #555;
}
@media (max-width: 540px) {
  .navbar-default .navbar-nav .open .dropdown-menu > li > a {
    color: #777;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
    color: #333;
    background-color: transparent;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
    color: #555;
    background-color: #e7e7e7;
  }
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
    color: #ccc;
    background-color: transparent;
  }
}
.navbar-default .navbar-link {
  color: #777;
}
.navbar-default .navbar-link:hover {
  color: #333;
}
.navbar-default .btn-link {
  color: #777;
}
.navbar-default .btn-link:hover,
.navbar-default .btn-link:focus {
  color: #333;
}
.navbar-default .btn-link[disabled]:hover,
fieldset[disabled] .navbar-default .btn-link:hover,
.navbar-default .btn-link[disabled]:focus,
fieldset[disabled] .navbar-default .btn-link:focus {
  color: #ccc;
}
.navbar-inverse {
  background-color: #222;
  border-color: #080808;
}
.navbar-inverse .navbar-brand {
  color: #9d9d9d;
}
.navbar-inverse .navbar-brand:hover,
.navbar-inverse .navbar-brand:focus {
  color: #fff;
  background-color: transparent;
}
.navbar-inverse .navbar-text {
  color: #9d9d9d;
}
.navbar-inverse .navbar-nav > li > a {
  color: #9d9d9d;
}
.navbar-inverse .navbar-nav > li > a:hover,
.navbar-inverse .navbar-nav > li > a:focus {
  color: #fff;
  background-color: transparent;
}
.navbar-inverse .navbar-nav > .active > a,
.navbar-inverse .navbar-nav > .active > a:hover,
.navbar-inverse .navbar-nav > .active > a:focus {
  color: #fff;
  background-color: #080808;
}
.navbar-inverse .navbar-nav > .disabled > a,
.navbar-inverse .navbar-nav > .disabled > a:hover,
.navbar-inverse .navbar-nav > .disabled > a:focus {
  color: #444;
  background-color: transparent;
}
.navbar-inverse .navbar-toggle {
  border-color: #333;
}
.navbar-inverse .navbar-toggle:hover,
.navbar-inverse .navbar-toggle:focus {
  background-color: #333;
}
.navbar-inverse .navbar-toggle .icon-bar {
  background-color: #fff;
}
.navbar-inverse .navbar-collapse,
.navbar-inverse .navbar-form {
  border-color: #101010;
}
.navbar-inverse .navbar-nav > .open > a,
.navbar-inverse .navbar-nav > .open > a:hover,
.navbar-inverse .navbar-nav > .open > a:focus {
  background-color: #080808;
  color: #fff;
}
@media (max-width: 540px) {
  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
    border-color: #080808;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
    background-color: #080808;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
    color: #9d9d9d;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
    color: #fff;
    background-color: transparent;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
    color: #fff;
    background-color: #080808;
  }
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
    color: #444;
    background-color: transparent;
  }
}
.navbar-inverse .navbar-link {
  color: #9d9d9d;
}
.navbar-inverse .navbar-link:hover {
  color: #fff;
}
.navbar-inverse .btn-link {
  color: #9d9d9d;
}
.navbar-inverse .btn-link:hover,
.navbar-inverse .btn-link:focus {
  color: #fff;
}
.navbar-inverse .btn-link[disabled]:hover,
fieldset[disabled] .navbar-inverse .btn-link:hover,
.navbar-inverse .btn-link[disabled]:focus,
fieldset[disabled] .navbar-inverse .btn-link:focus {
  color: #444;
}
.breadcrumb {
  padding: 8px 15px;
  margin-bottom: 18px;
  list-style: none;
  background-color: #f5f5f5;
  border-radius: 2px;
}
.breadcrumb > li {
  display: inline-block;
}
.breadcrumb > li + li:before {
  content: "/\00a0";
  padding: 0 5px;
  color: #5e5e5e;
}
.breadcrumb > .active {
  color: #777777;
}
.pagination {
  display: inline-block;
  padding-left: 0;
  margin: 18px 0;
  border-radius: 2px;
}
.pagination > li {
  display: inline;
}
.pagination > li > a,
.pagination > li > span {
  position: relative;
  float: left;
  padding: 6px 12px;
  line-height: 1.42857143;
  text-decoration: none;
  color: #337ab7;
  background-color: #fff;
  border: 1px solid #ddd;
  margin-left: -1px;
}
.pagination > li:first-child > a,
.pagination > li:first-child > span {
  margin-left: 0;
  border-bottom-left-radius: 2px;
  border-top-left-radius: 2px;
}
.pagination > li:last-child > a,
.pagination > li:last-child > span {
  border-bottom-right-radius: 2px;
  border-top-right-radius: 2px;
}
.pagination > li > a:hover,
.pagination > li > span:hover,
.pagination > li > a:focus,
.pagination > li > span:focus {
  z-index: 2;
  color: #23527c;
  background-color: #eeeeee;
  border-color: #ddd;
}
.pagination > .active > a,
.pagination > .active > span,
.pagination > .active > a:hover,
.pagination > .active > span:hover,
.pagination > .active > a:focus,
.pagination > .active > span:focus {
  z-index: 3;
  color: #fff;
  background-color: #337ab7;
  border-color: #337ab7;
  cursor: default;
}
.pagination > .disabled > span,
.pagination > .disabled > span:hover,
.pagination > .disabled > span:focus,
.pagination > .disabled > a,
.pagination > .disabled > a:hover,
.pagination > .disabled > a:focus {
  color: #777777;
  background-color: #fff;
  border-color: #ddd;
  cursor: not-allowed;
}
.pagination-lg > li > a,
.pagination-lg > li > span {
  padding: 10px 16px;
  font-size: 17px;
  line-height: 1.3333333;
}
.pagination-lg > li:first-child > a,
.pagination-lg > li:first-child > span {
  border-bottom-left-radius: 3px;
  border-top-left-radius: 3px;
}
.pagination-lg > li:last-child > a,
.pagination-lg > li:last-child > span {
  border-bottom-right-radius: 3px;
  border-top-right-radius: 3px;
}
.pagination-sm > li > a,
.pagination-sm > li > span {
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
}
.pagination-sm > li:first-child > a,
.pagination-sm > li:first-child > span {
  border-bottom-left-radius: 1px;
  border-top-left-radius: 1px;
}
.pagination-sm > li:last-child > a,
.pagination-sm > li:last-child > span {
  border-bottom-right-radius: 1px;
  border-top-right-radius: 1px;
}
.pager {
  padding-left: 0;
  margin: 18px 0;
  list-style: none;
  text-align: center;
}
.pager li {
  display: inline;
}
.pager li > a,
.pager li > span {
  display: inline-block;
  padding: 5px 14px;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 15px;
}
.pager li > a:hover,
.pager li > a:focus {
  text-decoration: none;
  background-color: #eeeeee;
}
.pager .next > a,
.pager .next > span {
  float: right;
}
.pager .previous > a,
.pager .previous > span {
  float: left;
}
.pager .disabled > a,
.pager .disabled > a:hover,
.pager .disabled > a:focus,
.pager .disabled > span {
  color: #777777;
  background-color: #fff;
  cursor: not-allowed;
}
.label {
  display: inline;
  padding: .2em .6em .3em;
  font-size: 75%;
  font-weight: bold;
  line-height: 1;
  color: #fff;
  text-align: center;
  white-space: nowrap;
  vertical-align: baseline;
  border-radius: .25em;
}
a.label:hover,
a.label:focus {
  color: #fff;
  text-decoration: none;
  cursor: pointer;
}
.label:empty {
  display: none;
}
.btn .label {
  position: relative;
  top: -1px;
}
.label-default {
  background-color: #777777;
}
.label-default[href]:hover,
.label-default[href]:focus {
  background-color: #5e5e5e;
}
.label-primary {
  background-color: #337ab7;
}
.label-primary[href]:hover,
.label-primary[href]:focus {
  background-color: #286090;
}
.label-success {
  background-color: #5cb85c;
}
.label-success[href]:hover,
.label-success[href]:focus {
  background-color: #449d44;
}
.label-info {
  background-color: #5bc0de;
}
.label-info[href]:hover,
.label-info[href]:focus {
  background-color: #31b0d5;
}
.label-warning {
  background-color: #f0ad4e;
}
.label-warning[href]:hover,
.label-warning[href]:focus {
  background-color: #ec971f;
}
.label-danger {
  background-color: #d9534f;
}
.label-danger[href]:hover,
.label-danger[href]:focus {
  background-color: #c9302c;
}
.badge {
  display: inline-block;
  min-width: 10px;
  padding: 3px 7px;
  font-size: 12px;
  font-weight: bold;
  color: #fff;
  line-height: 1;
  vertical-align: middle;
  white-space: nowrap;
  text-align: center;
  background-color: #777777;
  border-radius: 10px;
}
.badge:empty {
  display: none;
}
.btn .badge {
  position: relative;
  top: -1px;
}
.btn-xs .badge,
.btn-group-xs > .btn .badge {
  top: 0;
  padding: 1px 5px;
}
a.badge:hover,
a.badge:focus {
  color: #fff;
  text-decoration: none;
  cursor: pointer;
}
.list-group-item.active > .badge,
.nav-pills > .active > a > .badge {
  color: #337ab7;
  background-color: #fff;
}
.list-group-item > .badge {
  float: right;
}
.list-group-item > .badge + .badge {
  margin-right: 5px;
}
.nav-pills > li > a > .badge {
  margin-left: 3px;
}
.jumbotron {
  padding-top: 30px;
  padding-bottom: 30px;
  margin-bottom: 30px;
  color: inherit;
  background-color: #eeeeee;
}
.jumbotron h1,
.jumbotron .h1 {
  color: inherit;
}
.jumbotron p {
  margin-bottom: 15px;
  font-size: 20px;
  font-weight: 200;
}
.jumbotron > hr {
  border-top-color: #d5d5d5;
}
.container .jumbotron,
.container-fluid .jumbotron {
  border-radius: 3px;
  padding-left: 0px;
  padding-right: 0px;
}
.jumbotron .container {
  max-width: 100%;
}
@media screen and (min-width: 768px) {
  .jumbotron {
    padding-top: 48px;
    padding-bottom: 48px;
  }
  .container .jumbotron,
  .container-fluid .jumbotron {
    padding-left: 60px;
    padding-right: 60px;
  }
  .jumbotron h1,
  .jumbotron .h1 {
    font-size: 59px;
  }
}
.thumbnail {
  display: block;
  padding: 4px;
  margin-bottom: 18px;
  line-height: 1.42857143;
  background-color: #fff;
  border: 1px solid #ddd;
  border-radius: 2px;
  -webkit-transition: border 0.2s ease-in-out;
  -o-transition: border 0.2s ease-in-out;
  transition: border 0.2s ease-in-out;
}
.thumbnail > img,
.thumbnail a > img {
  margin-left: auto;
  margin-right: auto;
}
a.thumbnail:hover,
a.thumbnail:focus,
a.thumbnail.active {
  border-color: #337ab7;
}
.thumbnail .caption {
  padding: 9px;
  color: #000;
}
.alert {
  padding: 15px;
  margin-bottom: 18px;
  border: 1px solid transparent;
  border-radius: 2px;
}
.alert h4 {
  margin-top: 0;
  color: inherit;
}
.alert .alert-link {
  font-weight: bold;
}
.alert > p,
.alert > ul {
  margin-bottom: 0;
}
.alert > p + p {
  margin-top: 5px;
}
.alert-dismissable,
.alert-dismissible {
  padding-right: 35px;
}
.alert-dismissable .close,
.alert-dismissible .close {
  position: relative;
  top: -2px;
  right: -21px;
  color: inherit;
}
.alert-success {
  background-color: #dff0d8;
  border-color: #d6e9c6;
  color: #3c763d;
}
.alert-success hr {
  border-top-color: #c9e2b3;
}
.alert-success .alert-link {
  color: #2b542c;
}
.alert-info {
  background-color: #d9edf7;
  border-color: #bce8f1;
  color: #31708f;
}
.alert-info hr {
  border-top-color: #a6e1ec;
}
.alert-info .alert-link {
  color: #245269;
}
.alert-warning {
  background-color: #fcf8e3;
  border-color: #faebcc;
  color: #8a6d3b;
}
.alert-warning hr {
  border-top-color: #f7e1b5;
}
.alert-warning .alert-link {
  color: #66512c;
}
.alert-danger {
  background-color: #f2dede;
  border-color: #ebccd1;
  color: #a94442;
}
.alert-danger hr {
  border-top-color: #e4b9c0;
}
.alert-danger .alert-link {
  color: #843534;
}
@-webkit-keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}
@keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}
.progress {
  overflow: hidden;
  height: 18px;
  margin-bottom: 18px;
  background-color: #f5f5f5;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
}
.progress-bar {
  float: left;
  width: 0%;
  height: 100%;
  font-size: 12px;
  line-height: 18px;
  color: #fff;
  text-align: center;
  background-color: #337ab7;
  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  -webkit-transition: width 0.6s ease;
  -o-transition: width 0.6s ease;
  transition: width 0.6s ease;
}
.progress-striped .progress-bar,
.progress-bar-striped {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-size: 40px 40px;
}
.progress.active .progress-bar,
.progress-bar.active {
  -webkit-animation: progress-bar-stripes 2s linear infinite;
  -o-animation: progress-bar-stripes 2s linear infinite;
  animation: progress-bar-stripes 2s linear infinite;
}
.progress-bar-success {
  background-color: #5cb85c;
}
.progress-striped .progress-bar-success {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-info {
  background-color: #5bc0de;
}
.progress-striped .progress-bar-info {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-warning {
  background-color: #f0ad4e;
}
.progress-striped .progress-bar-warning {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.progress-bar-danger {
  background-color: #d9534f;
}
.progress-striped .progress-bar-danger {
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}
.media {
  margin-top: 15px;
}
.media:first-child {
  margin-top: 0;
}
.media,
.media-body {
  zoom: 1;
  overflow: hidden;
}
.media-body {
  width: 10000px;
}
.media-object {
  display: block;
}
.media-object.img-thumbnail {
  max-width: none;
}
.media-right,
.media > .pull-right {
  padding-left: 10px;
}
.media-left,
.media > .pull-left {
  padding-right: 10px;
}
.media-left,
.media-right,
.media-body {
  display: table-cell;
  vertical-align: top;
}
.media-middle {
  vertical-align: middle;
}
.media-bottom {
  vertical-align: bottom;
}
.media-heading {
  margin-top: 0;
  margin-bottom: 5px;
}
.media-list {
  padding-left: 0;
  list-style: none;
}
.list-group {
  margin-bottom: 20px;
  padding-left: 0;
}
.list-group-item {
  position: relative;
  display: block;
  padding: 10px 15px;
  margin-bottom: -1px;
  background-color: #fff;
  border: 1px solid #ddd;
}
.list-group-item:first-child {
  border-top-right-radius: 2px;
  border-top-left-radius: 2px;
}
.list-group-item:last-child {
  margin-bottom: 0;
  border-bottom-right-radius: 2px;
  border-bottom-left-radius: 2px;
}
a.list-group-item,
button.list-group-item {
  color: #555;
}
a.list-group-item .list-group-item-heading,
button.list-group-item .list-group-item-heading {
  color: #333;
}
a.list-group-item:hover,
button.list-group-item:hover,
a.list-group-item:focus,
button.list-group-item:focus {
  text-decoration: none;
  color: #555;
  background-color: #f5f5f5;
}
button.list-group-item {
  width: 100%;
  text-align: left;
}
.list-group-item.disabled,
.list-group-item.disabled:hover,
.list-group-item.disabled:focus {
  background-color: #eeeeee;
  color: #777777;
  cursor: not-allowed;
}
.list-group-item.disabled .list-group-item-heading,
.list-group-item.disabled:hover .list-group-item-heading,
.list-group-item.disabled:focus .list-group-item-heading {
  color: inherit;
}
.list-group-item.disabled .list-group-item-text,
.list-group-item.disabled:hover .list-group-item-text,
.list-group-item.disabled:focus .list-group-item-text {
  color: #777777;
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
  z-index: 2;
  color: #fff;
  background-color: #337ab7;
  border-color: #337ab7;
}
.list-group-item.active .list-group-item-heading,
.list-group-item.active:hover .list-group-item-heading,
.list-group-item.active:focus .list-group-item-heading,
.list-group-item.active .list-group-item-heading > small,
.list-group-item.active:hover .list-group-item-heading > small,
.list-group-item.active:focus .list-group-item-heading > small,
.list-group-item.active .list-group-item-heading > .small,
.list-group-item.active:hover .list-group-item-heading > .small,
.list-group-item.active:focus .list-group-item-heading > .small {
  color: inherit;
}
.list-group-item.active .list-group-item-text,
.list-group-item.active:hover .list-group-item-text,
.list-group-item.active:focus .list-group-item-text {
  color: #c7ddef;
}
.list-group-item-success {
  color: #3c763d;
  background-color: #dff0d8;
}
a.list-group-item-success,
button.list-group-item-success {
  color: #3c763d;
}
a.list-group-item-success .list-group-item-heading,
button.list-group-item-success .list-group-item-heading {
  color: inherit;
}
a.list-group-item-success:hover,
button.list-group-item-success:hover,
a.list-group-item-success:focus,
button.list-group-item-success:focus {
  color: #3c763d;
  background-color: #d0e9c6;
}
a.list-group-item-success.active,
button.list-group-item-success.active,
a.list-group-item-success.active:hover,
button.list-group-item-success.active:hover,
a.list-group-item-success.active:focus,
button.list-group-item-success.active:focus {
  color: #fff;
  background-color: #3c763d;
  border-color: #3c763d;
}
.list-group-item-info {
  color: #31708f;
  background-color: #d9edf7;
}
a.list-group-item-info,
button.list-group-item-info {
  color: #31708f;
}
a.list-group-item-info .list-group-item-heading,
button.list-group-item-info .list-group-item-heading {
  color: inherit;
}
a.list-group-item-info:hover,
button.list-group-item-info:hover,
a.list-group-item-info:focus,
button.list-group-item-info:focus {
  color: #31708f;
  background-color: #c4e3f3;
}
a.list-group-item-info.active,
button.list-group-item-info.active,
a.list-group-item-info.active:hover,
button.list-group-item-info.active:hover,
a.list-group-item-info.active:focus,
button.list-group-item-info.active:focus {
  color: #fff;
  background-color: #31708f;
  border-color: #31708f;
}
.list-group-item-warning {
  color: #8a6d3b;
  background-color: #fcf8e3;
}
a.list-group-item-warning,
button.list-group-item-warning {
  color: #8a6d3b;
}
a.list-group-item-warning .list-group-item-heading,
button.list-group-item-warning .list-group-item-heading {
  color: inherit;
}
a.list-group-item-warning:hover,
button.list-group-item-warning:hover,
a.list-group-item-warning:focus,
button.list-group-item-warning:focus {
  color: #8a6d3b;
  background-color: #faf2cc;
}
a.list-group-item-warning.active,
button.list-group-item-warning.active,
a.list-group-item-warning.active:hover,
button.list-group-item-warning.active:hover,
a.list-group-item-warning.active:focus,
button.list-group-item-warning.active:focus {
  color: #fff;
  background-color: #8a6d3b;
  border-color: #8a6d3b;
}
.list-group-item-danger {
  color: #a94442;
  background-color: #f2dede;
}
a.list-group-item-danger,
button.list-group-item-danger {
  color: #a94442;
}
a.list-group-item-danger .list-group-item-heading,
button.list-group-item-danger .list-group-item-heading {
  color: inherit;
}
a.list-group-item-danger:hover,
button.list-group-item-danger:hover,
a.list-group-item-danger:focus,
button.list-group-item-danger:focus {
  color: #a94442;
  background-color: #ebcccc;
}
a.list-group-item-danger.active,
button.list-group-item-danger.active,
a.list-group-item-danger.active:hover,
button.list-group-item-danger.active:hover,
a.list-group-item-danger.active:focus,
button.list-group-item-danger.active:focus {
  color: #fff;
  background-color: #a94442;
  border-color: #a94442;
}
.list-group-item-heading {
  margin-top: 0;
  margin-bottom: 5px;
}
.list-group-item-text {
  margin-bottom: 0;
  line-height: 1.3;
}
.panel {
  margin-bottom: 18px;
  background-color: #fff;
  border: 1px solid transparent;
  border-radius: 2px;
  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
}
.panel-body {
  padding: 15px;
}
.panel-heading {
  padding: 10px 15px;
  border-bottom: 1px solid transparent;
  border-top-right-radius: 1px;
  border-top-left-radius: 1px;
}
.panel-heading > .dropdown .dropdown-toggle {
  color: inherit;
}
.panel-title {
  margin-top: 0;
  margin-bottom: 0;
  font-size: 15px;
  color: inherit;
}
.panel-title > a,
.panel-title > small,
.panel-title > .small,
.panel-title > small > a,
.panel-title > .small > a {
  color: inherit;
}
.panel-footer {
  padding: 10px 15px;
  background-color: #f5f5f5;
  border-top: 1px solid #ddd;
  border-bottom-right-radius: 1px;
  border-bottom-left-radius: 1px;
}
.panel > .list-group,
.panel > .panel-collapse > .list-group {
  margin-bottom: 0;
}
.panel > .list-group .list-group-item,
.panel > .panel-collapse > .list-group .list-group-item {
  border-width: 1px 0;
  border-radius: 0;
}
.panel > .list-group:first-child .list-group-item:first-child,
.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
  border-top: 0;
  border-top-right-radius: 1px;
  border-top-left-radius: 1px;
}
.panel > .list-group:last-child .list-group-item:last-child,
.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
  border-bottom: 0;
  border-bottom-right-radius: 1px;
  border-bottom-left-radius: 1px;
}
.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
.panel-heading + .list-group .list-group-item:first-child {
  border-top-width: 0;
}
.list-group + .panel-footer {
  border-top-width: 0;
}
.panel > .table,
.panel > .table-responsive > .table,
.panel > .panel-collapse > .table {
  margin-bottom: 0;
}
.panel > .table caption,
.panel > .table-responsive > .table caption,
.panel > .panel-collapse > .table caption {
  padding-left: 15px;
  padding-right: 15px;
}
.panel > .table:first-child,
.panel > .table-responsive:first-child > .table:first-child {
  border-top-right-radius: 1px;
  border-top-left-radius: 1px;
}
.panel > .table:first-child > thead:first-child > tr:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
  border-top-left-radius: 1px;
  border-top-right-radius: 1px;
}
.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
  border-top-left-radius: 1px;
}
.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
  border-top-right-radius: 1px;
}
.panel > .table:last-child,
.panel > .table-responsive:last-child > .table:last-child {
  border-bottom-right-radius: 1px;
  border-bottom-left-radius: 1px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
  border-bottom-left-radius: 1px;
  border-bottom-right-radius: 1px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
  border-bottom-left-radius: 1px;
}
.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
  border-bottom-right-radius: 1px;
}
.panel > .panel-body + .table,
.panel > .panel-body + .table-responsive,
.panel > .table + .panel-body,
.panel > .table-responsive + .panel-body {
  border-top: 1px solid #ddd;
}
.panel > .table > tbody:first-child > tr:first-child th,
.panel > .table > tbody:first-child > tr:first-child td {
  border-top: 0;
}
.panel > .table-bordered,
.panel > .table-responsive > .table-bordered {
  border: 0;
}
.panel > .table-bordered > thead > tr > th:first-child,
.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
.panel > .table-bordered > tbody > tr > th:first-child,
.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
.panel > .table-bordered > tfoot > tr > th:first-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
.panel > .table-bordered > thead > tr > td:first-child,
.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
.panel > .table-bordered > tbody > tr > td:first-child,
.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
.panel > .table-bordered > tfoot > tr > td:first-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
  border-left: 0;
}
.panel > .table-bordered > thead > tr > th:last-child,
.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
.panel > .table-bordered > tbody > tr > th:last-child,
.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
.panel > .table-bordered > tfoot > tr > th:last-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
.panel > .table-bordered > thead > tr > td:last-child,
.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
.panel > .table-bordered > tbody > tr > td:last-child,
.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
.panel > .table-bordered > tfoot > tr > td:last-child,
.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
  border-right: 0;
}
.panel > .table-bordered > thead > tr:first-child > td,
.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
.panel > .table-bordered > tbody > tr:first-child > td,
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
.panel > .table-bordered > thead > tr:first-child > th,
.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
.panel > .table-bordered > tbody > tr:first-child > th,
.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
  border-bottom: 0;
}
.panel > .table-bordered > tbody > tr:last-child > td,
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
.panel > .table-bordered > tfoot > tr:last-child > td,
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
.panel > .table-bordered > tbody > tr:last-child > th,
.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
.panel > .table-bordered > tfoot > tr:last-child > th,
.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
  border-bottom: 0;
}
.panel > .table-responsive {
  border: 0;
  margin-bottom: 0;
}
.panel-group {
  margin-bottom: 18px;
}
.panel-group .panel {
  margin-bottom: 0;
  border-radius: 2px;
}
.panel-group .panel + .panel {
  margin-top: 5px;
}
.panel-group .panel-heading {
  border-bottom: 0;
}
.panel-group .panel-heading + .panel-collapse > .panel-body,
.panel-group .panel-heading + .panel-collapse > .list-group {
  border-top: 1px solid #ddd;
}
.panel-group .panel-footer {
  border-top: 0;
}
.panel-group .panel-footer + .panel-collapse .panel-body {
  border-bottom: 1px solid #ddd;
}
.panel-default {
  border-color: #ddd;
}
.panel-default > .panel-heading {
  color: #333333;
  background-color: #f5f5f5;
  border-color: #ddd;
}
.panel-default > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #ddd;
}
.panel-default > .panel-heading .badge {
  color: #f5f5f5;
  background-color: #333333;
}
.panel-default > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #ddd;
}
.panel-primary {
  border-color: #337ab7;
}
.panel-primary > .panel-heading {
  color: #fff;
  background-color: #337ab7;
  border-color: #337ab7;
}
.panel-primary > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #337ab7;
}
.panel-primary > .panel-heading .badge {
  color: #337ab7;
  background-color: #fff;
}
.panel-primary > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #337ab7;
}
.panel-success {
  border-color: #d6e9c6;
}
.panel-success > .panel-heading {
  color: #3c763d;
  background-color: #dff0d8;
  border-color: #d6e9c6;
}
.panel-success > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #d6e9c6;
}
.panel-success > .panel-heading .badge {
  color: #dff0d8;
  background-color: #3c763d;
}
.panel-success > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #d6e9c6;
}
.panel-info {
  border-color: #bce8f1;
}
.panel-info > .panel-heading {
  color: #31708f;
  background-color: #d9edf7;
  border-color: #bce8f1;
}
.panel-info > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #bce8f1;
}
.panel-info > .panel-heading .badge {
  color: #d9edf7;
  background-color: #31708f;
}
.panel-info > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #bce8f1;
}
.panel-warning {
  border-color: #faebcc;
}
.panel-warning > .panel-heading {
  color: #8a6d3b;
  background-color: #fcf8e3;
  border-color: #faebcc;
}
.panel-warning > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #faebcc;
}
.panel-warning > .panel-heading .badge {
  color: #fcf8e3;
  background-color: #8a6d3b;
}
.panel-warning > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #faebcc;
}
.panel-danger {
  border-color: #ebccd1;
}
.panel-danger > .panel-heading {
  color: #a94442;
  background-color: #f2dede;
  border-color: #ebccd1;
}
.panel-danger > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #ebccd1;
}
.panel-danger > .panel-heading .badge {
  color: #f2dede;
  background-color: #a94442;
}
.panel-danger > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #ebccd1;
}
.embed-responsive {
  position: relative;
  display: block;
  height: 0;
  padding: 0;
  overflow: hidden;
}
.embed-responsive .embed-responsive-item,
.embed-responsive iframe,
.embed-responsive embed,
.embed-responsive object,
.embed-responsive video {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  height: 100%;
  width: 100%;
  border: 0;
}
.embed-responsive-16by9 {
  padding-bottom: 56.25%;
}
.embed-responsive-4by3 {
  padding-bottom: 75%;
}
.well {
  min-height: 20px;
  padding: 19px;
  margin-bottom: 20px;
  background-color: #f5f5f5;
  border: 1px solid #e3e3e3;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
}
.well blockquote {
  border-color: #ddd;
  border-color: rgba(0, 0, 0, 0.15);
}
.well-lg {
  padding: 24px;
  border-radius: 3px;
}
.well-sm {
  padding: 9px;
  border-radius: 1px;
}
.close {
  float: right;
  font-size: 19.5px;
  font-weight: bold;
  line-height: 1;
  color: #000;
  text-shadow: 0 1px 0 #fff;
  opacity: 0.2;
  filter: alpha(opacity=20);
}
.close:hover,
.close:focus {
  color: #000;
  text-decoration: none;
  cursor: pointer;
  opacity: 0.5;
  filter: alpha(opacity=50);
}
button.close {
  padding: 0;
  cursor: pointer;
  background: transparent;
  border: 0;
  -webkit-appearance: none;
}
.modal-open {
  overflow: hidden;
}
.modal {
  display: none;
  overflow: hidden;
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1050;
  -webkit-overflow-scrolling: touch;
  outline: 0;
}
.modal.fade .modal-dialog {
  -webkit-transform: translate(0, -25%);
  -ms-transform: translate(0, -25%);
  -o-transform: translate(0, -25%);
  transform: translate(0, -25%);
  -webkit-transition: -webkit-transform 0.3s ease-out;
  -moz-transition: -moz-transform 0.3s ease-out;
  -o-transition: -o-transform 0.3s ease-out;
  transition: transform 0.3s ease-out;
}
.modal.in .modal-dialog {
  -webkit-transform: translate(0, 0);
  -ms-transform: translate(0, 0);
  -o-transform: translate(0, 0);
  transform: translate(0, 0);
}
.modal-open .modal {
  overflow-x: hidden;
  overflow-y: auto;
}
.modal-dialog {
  position: relative;
  width: auto;
  margin: 10px;
}
.modal-content {
  position: relative;
  background-color: #fff;
  border: 1px solid #999;
  border: 1px solid rgba(0, 0, 0, 0.2);
  border-radius: 3px;
  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
  background-clip: padding-box;
  outline: 0;
}
.modal-backdrop {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1040;
  background-color: #000;
}
.modal-backdrop.fade {
  opacity: 0;
  filter: alpha(opacity=0);
}
.modal-backdrop.in {
  opacity: 0.5;
  filter: alpha(opacity=50);
}
.modal-header {
  padding: 15px;
  border-bottom: 1px solid #e5e5e5;
}
.modal-header .close {
  margin-top: -2px;
}
.modal-title {
  margin: 0;
  line-height: 1.42857143;
}
.modal-body {
  position: relative;
  padding: 15px;
}
.modal-footer {
  padding: 15px;
  text-align: right;
  border-top: 1px solid #e5e5e5;
}
.modal-footer .btn + .btn {
  margin-left: 5px;
  margin-bottom: 0;
}
.modal-footer .btn-group .btn + .btn {
  margin-left: -1px;
}
.modal-footer .btn-block + .btn-block {
  margin-left: 0;
}
.modal-scrollbar-measure {
  position: absolute;
  top: -9999px;
  width: 50px;
  height: 50px;
  overflow: scroll;
}
@media (min-width: 768px) {
  .modal-dialog {
    width: 600px;
    margin: 30px auto;
  }
  .modal-content {
    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
  }
  .modal-sm {
    width: 300px;
  }
}
@media (min-width: 992px) {
  .modal-lg {
    width: 900px;
  }
}
.tooltip {
  position: absolute;
  z-index: 1070;
  display: block;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-style: normal;
  font-weight: normal;
  letter-spacing: normal;
  line-break: auto;
  line-height: 1.42857143;
  text-align: left;
  text-align: start;
  text-decoration: none;
  text-shadow: none;
  text-transform: none;
  white-space: normal;
  word-break: normal;
  word-spacing: normal;
  word-wrap: normal;
  font-size: 12px;
  opacity: 0;
  filter: alpha(opacity=0);
}
.tooltip.in {
  opacity: 0.9;
  filter: alpha(opacity=90);
}
.tooltip.top {
  margin-top: -3px;
  padding: 5px 0;
}
.tooltip.right {
  margin-left: 3px;
  padding: 0 5px;
}
.tooltip.bottom {
  margin-top: 3px;
  padding: 5px 0;
}
.tooltip.left {
  margin-left: -3px;
  padding: 0 5px;
}
.tooltip-inner {
  max-width: 200px;
  padding: 3px 8px;
  color: #fff;
  text-align: center;
  background-color: #000;
  border-radius: 2px;
}
.tooltip-arrow {
  position: absolute;
  width: 0;
  height: 0;
  border-color: transparent;
  border-style: solid;
}
.tooltip.top .tooltip-arrow {
  bottom: 0;
  left: 50%;
  margin-left: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.top-left .tooltip-arrow {
  bottom: 0;
  right: 5px;
  margin-bottom: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.top-right .tooltip-arrow {
  bottom: 0;
  left: 5px;
  margin-bottom: -5px;
  border-width: 5px 5px 0;
  border-top-color: #000;
}
.tooltip.right .tooltip-arrow {
  top: 50%;
  left: 0;
  margin-top: -5px;
  border-width: 5px 5px 5px 0;
  border-right-color: #000;
}
.tooltip.left .tooltip-arrow {
  top: 50%;
  right: 0;
  margin-top: -5px;
  border-width: 5px 0 5px 5px;
  border-left-color: #000;
}
.tooltip.bottom .tooltip-arrow {
  top: 0;
  left: 50%;
  margin-left: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.tooltip.bottom-left .tooltip-arrow {
  top: 0;
  right: 5px;
  margin-top: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.tooltip.bottom-right .tooltip-arrow {
  top: 0;
  left: 5px;
  margin-top: -5px;
  border-width: 0 5px 5px;
  border-bottom-color: #000;
}
.popover {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 1060;
  display: none;
  max-width: 276px;
  padding: 1px;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-style: normal;
  font-weight: normal;
  letter-spacing: normal;
  line-break: auto;
  line-height: 1.42857143;
  text-align: left;
  text-align: start;
  text-decoration: none;
  text-shadow: none;
  text-transform: none;
  white-space: normal;
  word-break: normal;
  word-spacing: normal;
  word-wrap: normal;
  font-size: 13px;
  background-color: #fff;
  background-clip: padding-box;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.2);
  border-radius: 3px;
  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
}
.popover.top {
  margin-top: -10px;
}
.popover.right {
  margin-left: 10px;
}
.popover.bottom {
  margin-top: 10px;
}
.popover.left {
  margin-left: -10px;
}
.popover-title {
  margin: 0;
  padding: 8px 14px;
  font-size: 13px;
  background-color: #f7f7f7;
  border-bottom: 1px solid #ebebeb;
  border-radius: 2px 2px 0 0;
}
.popover-content {
  padding: 9px 14px;
}
.popover > .arrow,
.popover > .arrow:after {
  position: absolute;
  display: block;
  width: 0;
  height: 0;
  border-color: transparent;
  border-style: solid;
}
.popover > .arrow {
  border-width: 11px;
}
.popover > .arrow:after {
  border-width: 10px;
  content: "";
}
.popover.top > .arrow {
  left: 50%;
  margin-left: -11px;
  border-bottom-width: 0;
  border-top-color: #999999;
  border-top-color: rgba(0, 0, 0, 0.25);
  bottom: -11px;
}
.popover.top > .arrow:after {
  content: " ";
  bottom: 1px;
  margin-left: -10px;
  border-bottom-width: 0;
  border-top-color: #fff;
}
.popover.right > .arrow {
  top: 50%;
  left: -11px;
  margin-top: -11px;
  border-left-width: 0;
  border-right-color: #999999;
  border-right-color: rgba(0, 0, 0, 0.25);
}
.popover.right > .arrow:after {
  content: " ";
  left: 1px;
  bottom: -10px;
  border-left-width: 0;
  border-right-color: #fff;
}
.popover.bottom > .arrow {
  left: 50%;
  margin-left: -11px;
  border-top-width: 0;
  border-bottom-color: #999999;
  border-bottom-color: rgba(0, 0, 0, 0.25);
  top: -11px;
}
.popover.bottom > .arrow:after {
  content: " ";
  top: 1px;
  margin-left: -10px;
  border-top-width: 0;
  border-bottom-color: #fff;
}
.popover.left > .arrow {
  top: 50%;
  right: -11px;
  margin-top: -11px;
  border-right-width: 0;
  border-left-color: #999999;
  border-left-color: rgba(0, 0, 0, 0.25);
}
.popover.left > .arrow:after {
  content: " ";
  right: 1px;
  border-right-width: 0;
  border-left-color: #fff;
  bottom: -10px;
}
.carousel {
  position: relative;
}
.carousel-inner {
  position: relative;
  overflow: hidden;
  width: 100%;
}
.carousel-inner > .item {
  display: none;
  position: relative;
  -webkit-transition: 0.6s ease-in-out left;
  -o-transition: 0.6s ease-in-out left;
  transition: 0.6s ease-in-out left;
}
.carousel-inner > .item > img,
.carousel-inner > .item > a > img {
  line-height: 1;
}
@media all and (transform-3d), (-webkit-transform-3d) {
  .carousel-inner > .item {
    -webkit-transition: -webkit-transform 0.6s ease-in-out;
    -moz-transition: -moz-transform 0.6s ease-in-out;
    -o-transition: -o-transform 0.6s ease-in-out;
    transition: transform 0.6s ease-in-out;
    -webkit-backface-visibility: hidden;
    -moz-backface-visibility: hidden;
    backface-visibility: hidden;
    -webkit-perspective: 1000px;
    -moz-perspective: 1000px;
    perspective: 1000px;
  }
  .carousel-inner > .item.next,
  .carousel-inner > .item.active.right {
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
    left: 0;
  }
  .carousel-inner > .item.prev,
  .carousel-inner > .item.active.left {
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
    left: 0;
  }
  .carousel-inner > .item.next.left,
  .carousel-inner > .item.prev.right,
  .carousel-inner > .item.active {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
    left: 0;
  }
}
.carousel-inner > .active,
.carousel-inner > .next,
.carousel-inner > .prev {
  display: block;
}
.carousel-inner > .active {
  left: 0;
}
.carousel-inner > .next,
.carousel-inner > .prev {
  position: absolute;
  top: 0;
  width: 100%;
}
.carousel-inner > .next {
  left: 100%;
}
.carousel-inner > .prev {
  left: -100%;
}
.carousel-inner > .next.left,
.carousel-inner > .prev.right {
  left: 0;
}
.carousel-inner > .active.left {
  left: -100%;
}
.carousel-inner > .active.right {
  left: 100%;
}
.carousel-control {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  width: 15%;
  opacity: 0.5;
  filter: alpha(opacity=50);
  font-size: 20px;
  color: #fff;
  text-align: center;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
  background-color: rgba(0, 0, 0, 0);
}
.carousel-control.left {
  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);
  background-repeat: repeat-x;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
}
.carousel-control.right {
  left: auto;
  right: 0;
  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);
  background-repeat: repeat-x;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
}
.carousel-control:hover,
.carousel-control:focus {
  outline: 0;
  color: #fff;
  text-decoration: none;
  opacity: 0.9;
  filter: alpha(opacity=90);
}
.carousel-control .icon-prev,
.carousel-control .icon-next,
.carousel-control .glyphicon-chevron-left,
.carousel-control .glyphicon-chevron-right {
  position: absolute;
  top: 50%;
  margin-top: -10px;
  z-index: 5;
  display: inline-block;
}
.carousel-control .icon-prev,
.carousel-control .glyphicon-chevron-left {
  left: 50%;
  margin-left: -10px;
}
.carousel-control .icon-next,
.carousel-control .glyphicon-chevron-right {
  right: 50%;
  margin-right: -10px;
}
.carousel-control .icon-prev,
.carousel-control .icon-next {
  width: 20px;
  height: 20px;
  line-height: 1;
  font-family: serif;
}
.carousel-control .icon-prev:before {
  content: '\2039';
}
.carousel-control .icon-next:before {
  content: '\203a';
}
.carousel-indicators {
  position: absolute;
  bottom: 10px;
  left: 50%;
  z-index: 15;
  width: 60%;
  margin-left: -30%;
  padding-left: 0;
  list-style: none;
  text-align: center;
}
.carousel-indicators li {
  display: inline-block;
  width: 10px;
  height: 10px;
  margin: 1px;
  text-indent: -999px;
  border: 1px solid #fff;
  border-radius: 10px;
  cursor: pointer;
  background-color: #000 \9;
  background-color: rgba(0, 0, 0, 0);
}
.carousel-indicators .active {
  margin: 0;
  width: 12px;
  height: 12px;
  background-color: #fff;
}
.carousel-caption {
  position: absolute;
  left: 15%;
  right: 15%;
  bottom: 20px;
  z-index: 10;
  padding-top: 20px;
  padding-bottom: 20px;
  color: #fff;
  text-align: center;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
}
.carousel-caption .btn {
  text-shadow: none;
}
@media screen and (min-width: 768px) {
  .carousel-control .glyphicon-chevron-left,
  .carousel-control .glyphicon-chevron-right,
  .carousel-control .icon-prev,
  .carousel-control .icon-next {
    width: 30px;
    height: 30px;
    margin-top: -10px;
    font-size: 30px;
  }
  .carousel-control .glyphicon-chevron-left,
  .carousel-control .icon-prev {
    margin-left: -10px;
  }
  .carousel-control .glyphicon-chevron-right,
  .carousel-control .icon-next {
    margin-right: -10px;
  }
  .carousel-caption {
    left: 20%;
    right: 20%;
    padding-bottom: 30px;
  }
  .carousel-indicators {
    bottom: 20px;
  }
}
.clearfix:before,
.clearfix:after,
.dl-horizontal dd:before,
.dl-horizontal dd:after,
.container:before,
.container:after,
.container-fluid:before,
.container-fluid:after,
.row:before,
.row:after,
.form-horizontal .form-group:before,
.form-horizontal .form-group:after,
.btn-toolbar:before,
.btn-toolbar:after,
.btn-group-vertical > .btn-group:before,
.btn-group-vertical > .btn-group:after,
.nav:before,
.nav:after,
.navbar:before,
.navbar:after,
.navbar-header:before,
.navbar-header:after,
.navbar-collapse:before,
.navbar-collapse:after,
.pager:before,
.pager:after,
.panel-body:before,
.panel-body:after,
.modal-header:before,
.modal-header:after,
.modal-footer:before,
.modal-footer:after,
.item_buttons:before,
.item_buttons:after {
  content: " ";
  display: table;
}
.clearfix:after,
.dl-horizontal dd:after,
.container:after,
.container-fluid:after,
.row:after,
.form-horizontal .form-group:after,
.btn-toolbar:after,
.btn-group-vertical > .btn-group:after,
.nav:after,
.navbar:after,
.navbar-header:after,
.navbar-collapse:after,
.pager:after,
.panel-body:after,
.modal-header:after,
.modal-footer:after,
.item_buttons:after {
  clear: both;
}
.center-block {
  display: block;
  margin-left: auto;
  margin-right: auto;
}
.pull-right {
  float: right !important;
}
.pull-left {
  float: left !important;
}
.hide {
  display: none !important;
}
.show {
  display: block !important;
}
.invisible {
  visibility: hidden;
}
.text-hide {
  font: 0/0 a;
  color: transparent;
  text-shadow: none;
  background-color: transparent;
  border: 0;
}
.hidden {
  display: none !important;
}
.affix {
  position: fixed;
}
@-ms-viewport {
  width: device-width;
}
.visible-xs,
.visible-sm,
.visible-md,
.visible-lg {
  display: none !important;
}
.visible-xs-block,
.visible-xs-inline,
.visible-xs-inline-block,
.visible-sm-block,
.visible-sm-inline,
.visible-sm-inline-block,
.visible-md-block,
.visible-md-inline,
.visible-md-inline-block,
.visible-lg-block,
.visible-lg-inline,
.visible-lg-inline-block {
  display: none !important;
}
@media (max-width: 767px) {
  .visible-xs {
    display: block !important;
  }
  table.visible-xs {
    display: table !important;
  }
  tr.visible-xs {
    display: table-row !important;
  }
  th.visible-xs,
  td.visible-xs {
    display: table-cell !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-block {
    display: block !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-inline {
    display: inline !important;
  }
}
@media (max-width: 767px) {
  .visible-xs-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm {
    display: block !important;
  }
  table.visible-sm {
    display: table !important;
  }
  tr.visible-sm {
    display: table-row !important;
  }
  th.visible-sm,
  td.visible-sm {
    display: table-cell !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-block {
    display: block !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-inline {
    display: inline !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .visible-sm-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md {
    display: block !important;
  }
  table.visible-md {
    display: table !important;
  }
  tr.visible-md {
    display: table-row !important;
  }
  th.visible-md,
  td.visible-md {
    display: table-cell !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-block {
    display: block !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-inline {
    display: inline !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .visible-md-inline-block {
    display: inline-block !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg {
    display: block !important;
  }
  table.visible-lg {
    display: table !important;
  }
  tr.visible-lg {
    display: table-row !important;
  }
  th.visible-lg,
  td.visible-lg {
    display: table-cell !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-block {
    display: block !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-inline {
    display: inline !important;
  }
}
@media (min-width: 1200px) {
  .visible-lg-inline-block {
    display: inline-block !important;
  }
}
@media (max-width: 767px) {
  .hidden-xs {
    display: none !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .hidden-sm {
    display: none !important;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .hidden-md {
    display: none !important;
  }
}
@media (min-width: 1200px) {
  .hidden-lg {
    display: none !important;
  }
}
.visible-print {
  display: none !important;
}
@media print {
  .visible-print {
    display: block !important;
  }
  table.visible-print {
    display: table !important;
  }
  tr.visible-print {
    display: table-row !important;
  }
  th.visible-print,
  td.visible-print {
    display: table-cell !important;
  }
}
.visible-print-block {
  display: none !important;
}
@media print {
  .visible-print-block {
    display: block !important;
  }
}
.visible-print-inline {
  display: none !important;
}
@media print {
  .visible-print-inline {
    display: inline !important;
  }
}
.visible-print-inline-block {
  display: none !important;
}
@media print {
  .visible-print-inline-block {
    display: inline-block !important;
  }
}
@media print {
  .hidden-print {
    display: none !important;
  }
}
/*!
*
* Font Awesome
*
*/
/*!
 *  Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
 *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
 */
/* FONT PATH
 * -------------------------- */
@font-face {
  font-family: 'FontAwesome';
  src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?v=4.2.0');
  src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.2.0') format('embedded-opentype'), url('../components/font-awesome/fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'), url('../components/font-awesome/fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'), url('../components/font-awesome/fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');
  font-weight: normal;
  font-style: normal;
}
.fa {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
/* makes the font 33% larger relative to the icon container */
.fa-lg {
  font-size: 1.33333333em;
  line-height: 0.75em;
  vertical-align: -15%;
}
.fa-2x {
  font-size: 2em;
}
.fa-3x {
  font-size: 3em;
}
.fa-4x {
  font-size: 4em;
}
.fa-5x {
  font-size: 5em;
}
.fa-fw {
  width: 1.28571429em;
  text-align: center;
}
.fa-ul {
  padding-left: 0;
  margin-left: 2.14285714em;
  list-style-type: none;
}
.fa-ul > li {
  position: relative;
}
.fa-li {
  position: absolute;
  left: -2.14285714em;
  width: 2.14285714em;
  top: 0.14285714em;
  text-align: center;
}
.fa-li.fa-lg {
  left: -1.85714286em;
}
.fa-border {
  padding: .2em .25em .15em;
  border: solid 0.08em #eee;
  border-radius: .1em;
}
.pull-right {
  float: right;
}
.pull-left {
  float: left;
}
.fa.pull-left {
  margin-right: .3em;
}
.fa.pull-right {
  margin-left: .3em;
}
.fa-spin {
  -webkit-animation: fa-spin 2s infinite linear;
  animation: fa-spin 2s infinite linear;
}
@-webkit-keyframes fa-spin {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(359deg);
    transform: rotate(359deg);
  }
}
@keyframes fa-spin {
  0% {
    -webkit-transform: rotate(0deg);
    transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(359deg);
    transform: rotate(359deg);
  }
}
.fa-rotate-90 {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
  -webkit-transform: rotate(90deg);
  -ms-transform: rotate(90deg);
  transform: rotate(90deg);
}
.fa-rotate-180 {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
  -webkit-transform: rotate(180deg);
  -ms-transform: rotate(180deg);
  transform: rotate(180deg);
}
.fa-rotate-270 {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
  -webkit-transform: rotate(270deg);
  -ms-transform: rotate(270deg);
  transform: rotate(270deg);
}
.fa-flip-horizontal {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
  -webkit-transform: scale(-1, 1);
  -ms-transform: scale(-1, 1);
  transform: scale(-1, 1);
}
.fa-flip-vertical {
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
  -webkit-transform: scale(1, -1);
  -ms-transform: scale(1, -1);
  transform: scale(1, -1);
}
:root .fa-rotate-90,
:root .fa-rotate-180,
:root .fa-rotate-270,
:root .fa-flip-horizontal,
:root .fa-flip-vertical {
  filter: none;
}
.fa-stack {
  position: relative;
  display: inline-block;
  width: 2em;
  height: 2em;
  line-height: 2em;
  vertical-align: middle;
}
.fa-stack-1x,
.fa-stack-2x {
  position: absolute;
  left: 0;
  width: 100%;
  text-align: center;
}
.fa-stack-1x {
  line-height: inherit;
}
.fa-stack-2x {
  font-size: 2em;
}
.fa-inverse {
  color: #fff;
}
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
   readers do not read off random characters that represent icons */
.fa-glass:before {
  content: "\f000";
}
.fa-music:before {
  content: "\f001";
}
.fa-search:before {
  content: "\f002";
}
.fa-envelope-o:before {
  content: "\f003";
}
.fa-heart:before {
  content: "\f004";
}
.fa-star:before {
  content: "\f005";
}
.fa-star-o:before {
  content: "\f006";
}
.fa-user:before {
  content: "\f007";
}
.fa-film:before {
  content: "\f008";
}
.fa-th-large:before {
  content: "\f009";
}
.fa-th:before {
  content: "\f00a";
}
.fa-th-list:before {
  content: "\f00b";
}
.fa-check:before {
  content: "\f00c";
}
.fa-remove:before,
.fa-close:before,
.fa-times:before {
  content: "\f00d";
}
.fa-search-plus:before {
  content: "\f00e";
}
.fa-search-minus:before {
  content: "\f010";
}
.fa-power-off:before {
  content: "\f011";
}
.fa-signal:before {
  content: "\f012";
}
.fa-gear:before,
.fa-cog:before {
  content: "\f013";
}
.fa-trash-o:before {
  content: "\f014";
}
.fa-home:before {
  content: "\f015";
}
.fa-file-o:before {
  content: "\f016";
}
.fa-clock-o:before {
  content: "\f017";
}
.fa-road:before {
  content: "\f018";
}
.fa-download:before {
  content: "\f019";
}
.fa-arrow-circle-o-down:before {
  content: "\f01a";
}
.fa-arrow-circle-o-up:before {
  content: "\f01b";
}
.fa-inbox:before {
  content: "\f01c";
}
.fa-play-circle-o:before {
  content: "\f01d";
}
.fa-rotate-right:before,
.fa-repeat:before {
  content: "\f01e";
}
.fa-refresh:before {
  content: "\f021";
}
.fa-list-alt:before {
  content: "\f022";
}
.fa-lock:before {
  content: "\f023";
}
.fa-flag:before {
  content: "\f024";
}
.fa-headphones:before {
  content: "\f025";
}
.fa-volume-off:before {
  content: "\f026";
}
.fa-volume-down:before {
  content: "\f027";
}
.fa-volume-up:before {
  content: "\f028";
}
.fa-qrcode:before {
  content: "\f029";
}
.fa-barcode:before {
  content: "\f02a";
}
.fa-tag:before {
  content: "\f02b";
}
.fa-tags:before {
  content: "\f02c";
}
.fa-book:before {
  content: "\f02d";
}
.fa-bookmark:before {
  content: "\f02e";
}
.fa-print:before {
  content: "\f02f";
}
.fa-camera:before {
  content: "\f030";
}
.fa-font:before {
  content: "\f031";
}
.fa-bold:before {
  content: "\f032";
}
.fa-italic:before {
  content: "\f033";
}
.fa-text-height:before {
  content: "\f034";
}
.fa-text-width:before {
  content: "\f035";
}
.fa-align-left:before {
  content: "\f036";
}
.fa-align-center:before {
  content: "\f037";
}
.fa-align-right:before {
  content: "\f038";
}
.fa-align-justify:before {
  content: "\f039";
}
.fa-list:before {
  content: "\f03a";
}
.fa-dedent:before,
.fa-outdent:before {
  content: "\f03b";
}
.fa-indent:before {
  content: "\f03c";
}
.fa-video-camera:before {
  content: "\f03d";
}
.fa-photo:before,
.fa-image:before,
.fa-picture-o:before {
  content: "\f03e";
}
.fa-pencil:before {
  content: "\f040";
}
.fa-map-marker:before {
  content: "\f041";
}
.fa-adjust:before {
  content: "\f042";
}
.fa-tint:before {
  content: "\f043";
}
.fa-edit:before,
.fa-pencil-square-o:before {
  content: "\f044";
}
.fa-share-square-o:before {
  content: "\f045";
}
.fa-check-square-o:before {
  content: "\f046";
}
.fa-arrows:before {
  content: "\f047";
}
.fa-step-backward:before {
  content: "\f048";
}
.fa-fast-backward:before {
  content: "\f049";
}
.fa-backward:before {
  content: "\f04a";
}
.fa-play:before {
  content: "\f04b";
}
.fa-pause:before {
  content: "\f04c";
}
.fa-stop:before {
  content: "\f04d";
}
.fa-forward:before {
  content: "\f04e";
}
.fa-fast-forward:before {
  content: "\f050";
}
.fa-step-forward:before {
  content: "\f051";
}
.fa-eject:before {
  content: "\f052";
}
.fa-chevron-left:before {
  content: "\f053";
}
.fa-chevron-right:before {
  content: "\f054";
}
.fa-plus-circle:before {
  content: "\f055";
}
.fa-minus-circle:before {
  content: "\f056";
}
.fa-times-circle:before {
  content: "\f057";
}
.fa-check-circle:before {
  content: "\f058";
}
.fa-question-circle:before {
  content: "\f059";
}
.fa-info-circle:before {
  content: "\f05a";
}
.fa-crosshairs:before {
  content: "\f05b";
}
.fa-times-circle-o:before {
  content: "\f05c";
}
.fa-check-circle-o:before {
  content: "\f05d";
}
.fa-ban:before {
  content: "\f05e";
}
.fa-arrow-left:before {
  content: "\f060";
}
.fa-arrow-right:before {
  content: "\f061";
}
.fa-arrow-up:before {
  content: "\f062";
}
.fa-arrow-down:before {
  content: "\f063";
}
.fa-mail-forward:before,
.fa-share:before {
  content: "\f064";
}
.fa-expand:before {
  content: "\f065";
}
.fa-compress:before {
  content: "\f066";
}
.fa-plus:before {
  content: "\f067";
}
.fa-minus:before {
  content: "\f068";
}
.fa-asterisk:before {
  content: "\f069";
}
.fa-exclamation-circle:before {
  content: "\f06a";
}
.fa-gift:before {
  content: "\f06b";
}
.fa-leaf:before {
  content: "\f06c";
}
.fa-fire:before {
  content: "\f06d";
}
.fa-eye:before {
  content: "\f06e";
}
.fa-eye-slash:before {
  content: "\f070";
}
.fa-warning:before,
.fa-exclamation-triangle:before {
  content: "\f071";
}
.fa-plane:before {
  content: "\f072";
}
.fa-calendar:before {
  content: "\f073";
}
.fa-random:before {
  content: "\f074";
}
.fa-comment:before {
  content: "\f075";
}
.fa-magnet:before {
  content: "\f076";
}
.fa-chevron-up:before {
  content: "\f077";
}
.fa-chevron-down:before {
  content: "\f078";
}
.fa-retweet:before {
  content: "\f079";
}
.fa-shopping-cart:before {
  content: "\f07a";
}
.fa-folder:before {
  content: "\f07b";
}
.fa-folder-open:before {
  content: "\f07c";
}
.fa-arrows-v:before {
  content: "\f07d";
}
.fa-arrows-h:before {
  content: "\f07e";
}
.fa-bar-chart-o:before,
.fa-bar-chart:before {
  content: "\f080";
}
.fa-twitter-square:before {
  content: "\f081";
}
.fa-facebook-square:before {
  content: "\f082";
}
.fa-camera-retro:before {
  content: "\f083";
}
.fa-key:before {
  content: "\f084";
}
.fa-gears:before,
.fa-cogs:before {
  content: "\f085";
}
.fa-comments:before {
  content: "\f086";
}
.fa-thumbs-o-up:before {
  content: "\f087";
}
.fa-thumbs-o-down:before {
  content: "\f088";
}
.fa-star-half:before {
  content: "\f089";
}
.fa-heart-o:before {
  content: "\f08a";
}
.fa-sign-out:before {
  content: "\f08b";
}
.fa-linkedin-square:before {
  content: "\f08c";
}
.fa-thumb-tack:before {
  content: "\f08d";
}
.fa-external-link:before {
  content: "\f08e";
}
.fa-sign-in:before {
  content: "\f090";
}
.fa-trophy:before {
  content: "\f091";
}
.fa-github-square:before {
  content: "\f092";
}
.fa-upload:before {
  content: "\f093";
}
.fa-lemon-o:before {
  content: "\f094";
}
.fa-phone:before {
  content: "\f095";
}
.fa-square-o:before {
  content: "\f096";
}
.fa-bookmark-o:before {
  content: "\f097";
}
.fa-phone-square:before {
  content: "\f098";
}
.fa-twitter:before {
  content: "\f099";
}
.fa-facebook:before {
  content: "\f09a";
}
.fa-github:before {
  content: "\f09b";
}
.fa-unlock:before {
  content: "\f09c";
}
.fa-credit-card:before {
  content: "\f09d";
}
.fa-rss:before {
  content: "\f09e";
}
.fa-hdd-o:before {
  content: "\f0a0";
}
.fa-bullhorn:before {
  content: "\f0a1";
}
.fa-bell:before {
  content: "\f0f3";
}
.fa-certificate:before {
  content: "\f0a3";
}
.fa-hand-o-right:before {
  content: "\f0a4";
}
.fa-hand-o-left:before {
  content: "\f0a5";
}
.fa-hand-o-up:before {
  content: "\f0a6";
}
.fa-hand-o-down:before {
  content: "\f0a7";
}
.fa-arrow-circle-left:before {
  content: "\f0a8";
}
.fa-arrow-circle-right:before {
  content: "\f0a9";
}
.fa-arrow-circle-up:before {
  content: "\f0aa";
}
.fa-arrow-circle-down:before {
  content: "\f0ab";
}
.fa-globe:before {
  content: "\f0ac";
}
.fa-wrench:before {
  content: "\f0ad";
}
.fa-tasks:before {
  content: "\f0ae";
}
.fa-filter:before {
  content: "\f0b0";
}
.fa-briefcase:before {
  content: "\f0b1";
}
.fa-arrows-alt:before {
  content: "\f0b2";
}
.fa-group:before,
.fa-users:before {
  content: "\f0c0";
}
.fa-chain:before,
.fa-link:before {
  content: "\f0c1";
}
.fa-cloud:before {
  content: "\f0c2";
}
.fa-flask:before {
  content: "\f0c3";
}
.fa-cut:before,
.fa-scissors:before {
  content: "\f0c4";
}
.fa-copy:before,
.fa-files-o:before {
  content: "\f0c5";
}
.fa-paperclip:before {
  content: "\f0c6";
}
.fa-save:before,
.fa-floppy-o:before {
  content: "\f0c7";
}
.fa-square:before {
  content: "\f0c8";
}
.fa-navicon:before,
.fa-reorder:before,
.fa-bars:before {
  content: "\f0c9";
}
.fa-list-ul:before {
  content: "\f0ca";
}
.fa-list-ol:before {
  content: "\f0cb";
}
.fa-strikethrough:before {
  content: "\f0cc";
}
.fa-underline:before {
  content: "\f0cd";
}
.fa-table:before {
  content: "\f0ce";
}
.fa-magic:before {
  content: "\f0d0";
}
.fa-truck:before {
  content: "\f0d1";
}
.fa-pinterest:before {
  content: "\f0d2";
}
.fa-pinterest-square:before {
  content: "\f0d3";
}
.fa-google-plus-square:before {
  content: "\f0d4";
}
.fa-google-plus:before {
  content: "\f0d5";
}
.fa-money:before {
  content: "\f0d6";
}
.fa-caret-down:before {
  content: "\f0d7";
}
.fa-caret-up:before {
  content: "\f0d8";
}
.fa-caret-left:before {
  content: "\f0d9";
}
.fa-caret-right:before {
  content: "\f0da";
}
.fa-columns:before {
  content: "\f0db";
}
.fa-unsorted:before,
.fa-sort:before {
  content: "\f0dc";
}
.fa-sort-down:before,
.fa-sort-desc:before {
  content: "\f0dd";
}
.fa-sort-up:before,
.fa-sort-asc:before {
  content: "\f0de";
}
.fa-envelope:before {
  content: "\f0e0";
}
.fa-linkedin:before {
  content: "\f0e1";
}
.fa-rotate-left:before,
.fa-undo:before {
  content: "\f0e2";
}
.fa-legal:before,
.fa-gavel:before {
  content: "\f0e3";
}
.fa-dashboard:before,
.fa-tachometer:before {
  content: "\f0e4";
}
.fa-comment-o:before {
  content: "\f0e5";
}
.fa-comments-o:before {
  content: "\f0e6";
}
.fa-flash:before,
.fa-bolt:before {
  content: "\f0e7";
}
.fa-sitemap:before {
  content: "\f0e8";
}
.fa-umbrella:before {
  content: "\f0e9";
}
.fa-paste:before,
.fa-clipboard:before {
  content: "\f0ea";
}
.fa-lightbulb-o:before {
  content: "\f0eb";
}
.fa-exchange:before {
  content: "\f0ec";
}
.fa-cloud-download:before {
  content: "\f0ed";
}
.fa-cloud-upload:before {
  content: "\f0ee";
}
.fa-user-md:before {
  content: "\f0f0";
}
.fa-stethoscope:before {
  content: "\f0f1";
}
.fa-suitcase:before {
  content: "\f0f2";
}
.fa-bell-o:before {
  content: "\f0a2";
}
.fa-coffee:before {
  content: "\f0f4";
}
.fa-cutlery:before {
  content: "\f0f5";
}
.fa-file-text-o:before {
  content: "\f0f6";
}
.fa-building-o:before {
  content: "\f0f7";
}
.fa-hospital-o:before {
  content: "\f0f8";
}
.fa-ambulance:before {
  content: "\f0f9";
}
.fa-medkit:before {
  content: "\f0fa";
}
.fa-fighter-jet:before {
  content: "\f0fb";
}
.fa-beer:before {
  content: "\f0fc";
}
.fa-h-square:before {
  content: "\f0fd";
}
.fa-plus-square:before {
  content: "\f0fe";
}
.fa-angle-double-left:before {
  content: "\f100";
}
.fa-angle-double-right:before {
  content: "\f101";
}
.fa-angle-double-up:before {
  content: "\f102";
}
.fa-angle-double-down:before {
  content: "\f103";
}
.fa-angle-left:before {
  content: "\f104";
}
.fa-angle-right:before {
  content: "\f105";
}
.fa-angle-up:before {
  content: "\f106";
}
.fa-angle-down:before {
  content: "\f107";
}
.fa-desktop:before {
  content: "\f108";
}
.fa-laptop:before {
  content: "\f109";
}
.fa-tablet:before {
  content: "\f10a";
}
.fa-mobile-phone:before,
.fa-mobile:before {
  content: "\f10b";
}
.fa-circle-o:before {
  content: "\f10c";
}
.fa-quote-left:before {
  content: "\f10d";
}
.fa-quote-right:before {
  content: "\f10e";
}
.fa-spinner:before {
  content: "\f110";
}
.fa-circle:before {
  content: "\f111";
}
.fa-mail-reply:before,
.fa-reply:before {
  content: "\f112";
}
.fa-github-alt:before {
  content: "\f113";
}
.fa-folder-o:before {
  content: "\f114";
}
.fa-folder-open-o:before {
  content: "\f115";
}
.fa-smile-o:before {
  content: "\f118";
}
.fa-frown-o:before {
  content: "\f119";
}
.fa-meh-o:before {
  content: "\f11a";
}
.fa-gamepad:before {
  content: "\f11b";
}
.fa-keyboard-o:before {
  content: "\f11c";
}
.fa-flag-o:before {
  content: "\f11d";
}
.fa-flag-checkered:before {
  content: "\f11e";
}
.fa-terminal:before {
  content: "\f120";
}
.fa-code:before {
  content: "\f121";
}
.fa-mail-reply-all:before,
.fa-reply-all:before {
  content: "\f122";
}
.fa-star-half-empty:before,
.fa-star-half-full:before,
.fa-star-half-o:before {
  content: "\f123";
}
.fa-location-arrow:before {
  content: "\f124";
}
.fa-crop:before {
  content: "\f125";
}
.fa-code-fork:before {
  content: "\f126";
}
.fa-unlink:before,
.fa-chain-broken:before {
  content: "\f127";
}
.fa-question:before {
  content: "\f128";
}
.fa-info:before {
  content: "\f129";
}
.fa-exclamation:before {
  content: "\f12a";
}
.fa-superscript:before {
  content: "\f12b";
}
.fa-subscript:before {
  content: "\f12c";
}
.fa-eraser:before {
  content: "\f12d";
}
.fa-puzzle-piece:before {
  content: "\f12e";
}
.fa-microphone:before {
  content: "\f130";
}
.fa-microphone-slash:before {
  content: "\f131";
}
.fa-shield:before {
  content: "\f132";
}
.fa-calendar-o:before {
  content: "\f133";
}
.fa-fire-extinguisher:before {
  content: "\f134";
}
.fa-rocket:before {
  content: "\f135";
}
.fa-maxcdn:before {
  content: "\f136";
}
.fa-chevron-circle-left:before {
  content: "\f137";
}
.fa-chevron-circle-right:before {
  content: "\f138";
}
.fa-chevron-circle-up:before {
  content: "\f139";
}
.fa-chevron-circle-down:before {
  content: "\f13a";
}
.fa-html5:before {
  content: "\f13b";
}
.fa-css3:before {
  content: "\f13c";
}
.fa-anchor:before {
  content: "\f13d";
}
.fa-unlock-alt:before {
  content: "\f13e";
}
.fa-bullseye:before {
  content: "\f140";
}
.fa-ellipsis-h:before {
  content: "\f141";
}
.fa-ellipsis-v:before {
  content: "\f142";
}
.fa-rss-square:before {
  content: "\f143";
}
.fa-play-circle:before {
  content: "\f144";
}
.fa-ticket:before {
  content: "\f145";
}
.fa-minus-square:before {
  content: "\f146";
}
.fa-minus-square-o:before {
  content: "\f147";
}
.fa-level-up:before {
  content: "\f148";
}
.fa-level-down:before {
  content: "\f149";
}
.fa-check-square:before {
  content: "\f14a";
}
.fa-pencil-square:before {
  content: "\f14b";
}
.fa-external-link-square:before {
  content: "\f14c";
}
.fa-share-square:before {
  content: "\f14d";
}
.fa-compass:before {
  content: "\f14e";
}
.fa-toggle-down:before,
.fa-caret-square-o-down:before {
  content: "\f150";
}
.fa-toggle-up:before,
.fa-caret-square-o-up:before {
  content: "\f151";
}
.fa-toggle-right:before,
.fa-caret-square-o-right:before {
  content: "\f152";
}
.fa-euro:before,
.fa-eur:before {
  content: "\f153";
}
.fa-gbp:before {
  content: "\f154";
}
.fa-dollar:before,
.fa-usd:before {
  content: "\f155";
}
.fa-rupee:before,
.fa-inr:before {
  content: "\f156";
}
.fa-cny:before,
.fa-rmb:before,
.fa-yen:before,
.fa-jpy:before {
  content: "\f157";
}
.fa-ruble:before,
.fa-rouble:before,
.fa-rub:before {
  content: "\f158";
}
.fa-won:before,
.fa-krw:before {
  content: "\f159";
}
.fa-bitcoin:before,
.fa-btc:before {
  content: "\f15a";
}
.fa-file:before {
  content: "\f15b";
}
.fa-file-text:before {
  content: "\f15c";
}
.fa-sort-alpha-asc:before {
  content: "\f15d";
}
.fa-sort-alpha-desc:before {
  content: "\f15e";
}
.fa-sort-amount-asc:before {
  content: "\f160";
}
.fa-sort-amount-desc:before {
  content: "\f161";
}
.fa-sort-numeric-asc:before {
  content: "\f162";
}
.fa-sort-numeric-desc:before {
  content: "\f163";
}
.fa-thumbs-up:before {
  content: "\f164";
}
.fa-thumbs-down:before {
  content: "\f165";
}
.fa-youtube-square:before {
  content: "\f166";
}
.fa-youtube:before {
  content: "\f167";
}
.fa-xing:before {
  content: "\f168";
}
.fa-xing-square:before {
  content: "\f169";
}
.fa-youtube-play:before {
  content: "\f16a";
}
.fa-dropbox:before {
  content: "\f16b";
}
.fa-stack-overflow:before {
  content: "\f16c";
}
.fa-instagram:before {
  content: "\f16d";
}
.fa-flickr:before {
  content: "\f16e";
}
.fa-adn:before {
  content: "\f170";
}
.fa-bitbucket:before {
  content: "\f171";
}
.fa-bitbucket-square:before {
  content: "\f172";
}
.fa-tumblr:before {
  content: "\f173";
}
.fa-tumblr-square:before {
  content: "\f174";
}
.fa-long-arrow-down:before {
  content: "\f175";
}
.fa-long-arrow-up:before {
  content: "\f176";
}
.fa-long-arrow-left:before {
  content: "\f177";
}
.fa-long-arrow-right:before {
  content: "\f178";
}
.fa-apple:before {
  content: "\f179";
}
.fa-windows:before {
  content: "\f17a";
}
.fa-android:before {
  content: "\f17b";
}
.fa-linux:before {
  content: "\f17c";
}
.fa-dribbble:before {
  content: "\f17d";
}
.fa-skype:before {
  content: "\f17e";
}
.fa-foursquare:before {
  content: "\f180";
}
.fa-trello:before {
  content: "\f181";
}
.fa-female:before {
  content: "\f182";
}
.fa-male:before {
  content: "\f183";
}
.fa-gittip:before {
  content: "\f184";
}
.fa-sun-o:before {
  content: "\f185";
}
.fa-moon-o:before {
  content: "\f186";
}
.fa-archive:before {
  content: "\f187";
}
.fa-bug:before {
  content: "\f188";
}
.fa-vk:before {
  content: "\f189";
}
.fa-weibo:before {
  content: "\f18a";
}
.fa-renren:before {
  content: "\f18b";
}
.fa-pagelines:before {
  content: "\f18c";
}
.fa-stack-exchange:before {
  content: "\f18d";
}
.fa-arrow-circle-o-right:before {
  content: "\f18e";
}
.fa-arrow-circle-o-left:before {
  content: "\f190";
}
.fa-toggle-left:before,
.fa-caret-square-o-left:before {
  content: "\f191";
}
.fa-dot-circle-o:before {
  content: "\f192";
}
.fa-wheelchair:before {
  content: "\f193";
}
.fa-vimeo-square:before {
  content: "\f194";
}
.fa-turkish-lira:before,
.fa-try:before {
  content: "\f195";
}
.fa-plus-square-o:before {
  content: "\f196";
}
.fa-space-shuttle:before {
  content: "\f197";
}
.fa-slack:before {
  content: "\f198";
}
.fa-envelope-square:before {
  content: "\f199";
}
.fa-wordpress:before {
  content: "\f19a";
}
.fa-openid:before {
  content: "\f19b";
}
.fa-institution:before,
.fa-bank:before,
.fa-university:before {
  content: "\f19c";
}
.fa-mortar-board:before,
.fa-graduation-cap:before {
  content: "\f19d";
}
.fa-yahoo:before {
  content: "\f19e";
}
.fa-google:before {
  content: "\f1a0";
}
.fa-reddit:before {
  content: "\f1a1";
}
.fa-reddit-square:before {
  content: "\f1a2";
}
.fa-stumbleupon-circle:before {
  content: "\f1a3";
}
.fa-stumbleupon:before {
  content: "\f1a4";
}
.fa-delicious:before {
  content: "\f1a5";
}
.fa-digg:before {
  content: "\f1a6";
}
.fa-pied-piper:before {
  content: "\f1a7";
}
.fa-pied-piper-alt:before {
  content: "\f1a8";
}
.fa-drupal:before {
  content: "\f1a9";
}
.fa-joomla:before {
  content: "\f1aa";
}
.fa-language:before {
  content: "\f1ab";
}
.fa-fax:before {
  content: "\f1ac";
}
.fa-building:before {
  content: "\f1ad";
}
.fa-child:before {
  content: "\f1ae";
}
.fa-paw:before {
  content: "\f1b0";
}
.fa-spoon:before {
  content: "\f1b1";
}
.fa-cube:before {
  content: "\f1b2";
}
.fa-cubes:before {
  content: "\f1b3";
}
.fa-behance:before {
  content: "\f1b4";
}
.fa-behance-square:before {
  content: "\f1b5";
}
.fa-steam:before {
  content: "\f1b6";
}
.fa-steam-square:before {
  content: "\f1b7";
}
.fa-recycle:before {
  content: "\f1b8";
}
.fa-automobile:before,
.fa-car:before {
  content: "\f1b9";
}
.fa-cab:before,
.fa-taxi:before {
  content: "\f1ba";
}
.fa-tree:before {
  content: "\f1bb";
}
.fa-spotify:before {
  content: "\f1bc";
}
.fa-deviantart:before {
  content: "\f1bd";
}
.fa-soundcloud:before {
  content: "\f1be";
}
.fa-database:before {
  content: "\f1c0";
}
.fa-file-pdf-o:before {
  content: "\f1c1";
}
.fa-file-word-o:before {
  content: "\f1c2";
}
.fa-file-excel-o:before {
  content: "\f1c3";
}
.fa-file-powerpoint-o:before {
  content: "\f1c4";
}
.fa-file-photo-o:before,
.fa-file-picture-o:before,
.fa-file-image-o:before {
  content: "\f1c5";
}
.fa-file-zip-o:before,
.fa-file-archive-o:before {
  content: "\f1c6";
}
.fa-file-sound-o:before,
.fa-file-audio-o:before {
  content: "\f1c7";
}
.fa-file-movie-o:before,
.fa-file-video-o:before {
  content: "\f1c8";
}
.fa-file-code-o:before {
  content: "\f1c9";
}
.fa-vine:before {
  content: "\f1ca";
}
.fa-codepen:before {
  content: "\f1cb";
}
.fa-jsfiddle:before {
  content: "\f1cc";
}
.fa-life-bouy:before,
.fa-life-buoy:before,
.fa-life-saver:before,
.fa-support:before,
.fa-life-ring:before {
  content: "\f1cd";
}
.fa-circle-o-notch:before {
  content: "\f1ce";
}
.fa-ra:before,
.fa-rebel:before {
  content: "\f1d0";
}
.fa-ge:before,
.fa-empire:before {
  content: "\f1d1";
}
.fa-git-square:before {
  content: "\f1d2";
}
.fa-git:before {
  content: "\f1d3";
}
.fa-hacker-news:before {
  content: "\f1d4";
}
.fa-tencent-weibo:before {
  content: "\f1d5";
}
.fa-qq:before {
  content: "\f1d6";
}
.fa-wechat:before,
.fa-weixin:before {
  content: "\f1d7";
}
.fa-send:before,
.fa-paper-plane:before {
  content: "\f1d8";
}
.fa-send-o:before,
.fa-paper-plane-o:before {
  content: "\f1d9";
}
.fa-history:before {
  content: "\f1da";
}
.fa-circle-thin:before {
  content: "\f1db";
}
.fa-header:before {
  content: "\f1dc";
}
.fa-paragraph:before {
  content: "\f1dd";
}
.fa-sliders:before {
  content: "\f1de";
}
.fa-share-alt:before {
  content: "\f1e0";
}
.fa-share-alt-square:before {
  content: "\f1e1";
}
.fa-bomb:before {
  content: "\f1e2";
}
.fa-soccer-ball-o:before,
.fa-futbol-o:before {
  content: "\f1e3";
}
.fa-tty:before {
  content: "\f1e4";
}
.fa-binoculars:before {
  content: "\f1e5";
}
.fa-plug:before {
  content: "\f1e6";
}
.fa-slideshare:before {
  content: "\f1e7";
}
.fa-twitch:before {
  content: "\f1e8";
}
.fa-yelp:before {
  content: "\f1e9";
}
.fa-newspaper-o:before {
  content: "\f1ea";
}
.fa-wifi:before {
  content: "\f1eb";
}
.fa-calculator:before {
  content: "\f1ec";
}
.fa-paypal:before {
  content: "\f1ed";
}
.fa-google-wallet:before {
  content: "\f1ee";
}
.fa-cc-visa:before {
  content: "\f1f0";
}
.fa-cc-mastercard:before {
  content: "\f1f1";
}
.fa-cc-discover:before {
  content: "\f1f2";
}
.fa-cc-amex:before {
  content: "\f1f3";
}
.fa-cc-paypal:before {
  content: "\f1f4";
}
.fa-cc-stripe:before {
  content: "\f1f5";
}
.fa-bell-slash:before {
  content: "\f1f6";
}
.fa-bell-slash-o:before {
  content: "\f1f7";
}
.fa-trash:before {
  content: "\f1f8";
}
.fa-copyright:before {
  content: "\f1f9";
}
.fa-at:before {
  content: "\f1fa";
}
.fa-eyedropper:before {
  content: "\f1fb";
}
.fa-paint-brush:before {
  content: "\f1fc";
}
.fa-birthday-cake:before {
  content: "\f1fd";
}
.fa-area-chart:before {
  content: "\f1fe";
}
.fa-pie-chart:before {
  content: "\f200";
}
.fa-line-chart:before {
  content: "\f201";
}
.fa-lastfm:before {
  content: "\f202";
}
.fa-lastfm-square:before {
  content: "\f203";
}
.fa-toggle-off:before {
  content: "\f204";
}
.fa-toggle-on:before {
  content: "\f205";
}
.fa-bicycle:before {
  content: "\f206";
}
.fa-bus:before {
  content: "\f207";
}
.fa-ioxhost:before {
  content: "\f208";
}
.fa-angellist:before {
  content: "\f209";
}
.fa-cc:before {
  content: "\f20a";
}
.fa-shekel:before,
.fa-sheqel:before,
.fa-ils:before {
  content: "\f20b";
}
.fa-meanpath:before {
  content: "\f20c";
}
/*!
*
* IPython base
*
*/
.modal.fade .modal-dialog {
  -webkit-transform: translate(0, 0);
  -ms-transform: translate(0, 0);
  -o-transform: translate(0, 0);
  transform: translate(0, 0);
}
code {
  color: #000;
}
pre {
  font-size: inherit;
  line-height: inherit;
}
label {
  font-weight: normal;
}
/* Make the page background atleast 100% the height of the view port */
/* Make the page itself atleast 70% the height of the view port */
.border-box-sizing {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
.corner-all {
  border-radius: 2px;
}
.no-padding {
  padding: 0px;
}
/* Flexible box model classes */
/* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */
/* This file is a compatability layer.  It allows the usage of flexible box 
model layouts accross multiple browsers, including older browsers.  The newest,
universal implementation of the flexible box model is used when available (see
`Modern browsers` comments below).  Browsers that are known to implement this 
new spec completely include:

    Firefox 28.0+
    Chrome 29.0+
    Internet Explorer 11+ 
    Opera 17.0+

Browsers not listed, including Safari, are supported via the styling under the
`Old browsers` comments below.
*/
.hbox {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
.hbox > * {
  /* Old browsers */
  -webkit-box-flex: 0;
  -moz-box-flex: 0;
  box-flex: 0;
  /* Modern browsers */
  flex: none;
}
.vbox {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
.vbox > * {
  /* Old browsers */
  -webkit-box-flex: 0;
  -moz-box-flex: 0;
  box-flex: 0;
  /* Modern browsers */
  flex: none;
}
.hbox.reverse,
.vbox.reverse,
.reverse {
  /* Old browsers */
  -webkit-box-direction: reverse;
  -moz-box-direction: reverse;
  box-direction: reverse;
  /* Modern browsers */
  flex-direction: row-reverse;
}
.hbox.box-flex0,
.vbox.box-flex0,
.box-flex0 {
  /* Old browsers */
  -webkit-box-flex: 0;
  -moz-box-flex: 0;
  box-flex: 0;
  /* Modern browsers */
  flex: none;
  width: auto;
}
.hbox.box-flex1,
.vbox.box-flex1,
.box-flex1 {
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
.hbox.box-flex,
.vbox.box-flex,
.box-flex {
  /* Old browsers */
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
.hbox.box-flex2,
.vbox.box-flex2,
.box-flex2 {
  /* Old browsers */
  -webkit-box-flex: 2;
  -moz-box-flex: 2;
  box-flex: 2;
  /* Modern browsers */
  flex: 2;
}
.box-group1 {
  /*  Deprecated */
  -webkit-box-flex-group: 1;
  -moz-box-flex-group: 1;
  box-flex-group: 1;
}
.box-group2 {
  /* Deprecated */
  -webkit-box-flex-group: 2;
  -moz-box-flex-group: 2;
  box-flex-group: 2;
}
.hbox.start,
.vbox.start,
.start {
  /* Old browsers */
  -webkit-box-pack: start;
  -moz-box-pack: start;
  box-pack: start;
  /* Modern browsers */
  justify-content: flex-start;
}
.hbox.end,
.vbox.end,
.end {
  /* Old browsers */
  -webkit-box-pack: end;
  -moz-box-pack: end;
  box-pack: end;
  /* Modern browsers */
  justify-content: flex-end;
}
.hbox.center,
.vbox.center,
.center {
  /* Old browsers */
  -webkit-box-pack: center;
  -moz-box-pack: center;
  box-pack: center;
  /* Modern browsers */
  justify-content: center;
}
.hbox.baseline,
.vbox.baseline,
.baseline {
  /* Old browsers */
  -webkit-box-pack: baseline;
  -moz-box-pack: baseline;
  box-pack: baseline;
  /* Modern browsers */
  justify-content: baseline;
}
.hbox.stretch,
.vbox.stretch,
.stretch {
  /* Old browsers */
  -webkit-box-pack: stretch;
  -moz-box-pack: stretch;
  box-pack: stretch;
  /* Modern browsers */
  justify-content: stretch;
}
.hbox.align-start,
.vbox.align-start,
.align-start {
  /* Old browsers */
  -webkit-box-align: start;
  -moz-box-align: start;
  box-align: start;
  /* Modern browsers */
  align-items: flex-start;
}
.hbox.align-end,
.vbox.align-end,
.align-end {
  /* Old browsers */
  -webkit-box-align: end;
  -moz-box-align: end;
  box-align: end;
  /* Modern browsers */
  align-items: flex-end;
}
.hbox.align-center,
.vbox.align-center,
.align-center {
  /* Old browsers */
  -webkit-box-align: center;
  -moz-box-align: center;
  box-align: center;
  /* Modern browsers */
  align-items: center;
}
.hbox.align-baseline,
.vbox.align-baseline,
.align-baseline {
  /* Old browsers */
  -webkit-box-align: baseline;
  -moz-box-align: baseline;
  box-align: baseline;
  /* Modern browsers */
  align-items: baseline;
}
.hbox.align-stretch,
.vbox.align-stretch,
.align-stretch {
  /* Old browsers */
  -webkit-box-align: stretch;
  -moz-box-align: stretch;
  box-align: stretch;
  /* Modern browsers */
  align-items: stretch;
}
div.error {
  margin: 2em;
  text-align: center;
}
div.error > h1 {
  font-size: 500%;
  line-height: normal;
}
div.error > p {
  font-size: 200%;
  line-height: normal;
}
div.traceback-wrapper {
  text-align: left;
  max-width: 800px;
  margin: auto;
}
/**
 * Primary styles
 *
 * Author: Jupyter Development Team
 */
body {
  background-color: #fff;
  /* This makes sure that the body covers the entire window and needs to
       be in a different element than the display: box in wrapper below */
  position: absolute;
  left: 0px;
  right: 0px;
  top: 0px;
  bottom: 0px;
  overflow: visible;
}
body > #header {
  /* Initially hidden to prevent FLOUC */
  display: none;
  background-color: #fff;
  /* Display over codemirror */
  position: relative;
  z-index: 100;
}
body > #header #header-container {
  padding-bottom: 5px;
  padding-top: 5px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
body > #header .header-bar {
  width: 100%;
  height: 1px;
  background: #e7e7e7;
  margin-bottom: -1px;
}
@media print {
  body > #header {
    display: none !important;
  }
}
#header-spacer {
  width: 100%;
  visibility: hidden;
}
@media print {
  #header-spacer {
    display: none;
  }
}
#ipython_notebook {
  padding-left: 0px;
  padding-top: 1px;
  padding-bottom: 1px;
}
@media (max-width: 991px) {
  #ipython_notebook {
    margin-left: 10px;
  }
}
[dir="rtl"] #ipython_notebook {
  float: right !important;
}
#noscript {
  width: auto;
  padding-top: 16px;
  padding-bottom: 16px;
  text-align: center;
  font-size: 22px;
  color: red;
  font-weight: bold;
}
#ipython_notebook img {
  height: 28px;
}
#site {
  width: 100%;
  display: none;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  overflow: auto;
}
@media print {
  #site {
    height: auto !important;
  }
}
/* Smaller buttons */
.ui-button .ui-button-text {
  padding: 0.2em 0.8em;
  font-size: 77%;
}
input.ui-button {
  padding: 0.3em 0.9em;
}
span#login_widget {
  float: right;
}
span#login_widget > .button,
#logout {
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
span#login_widget > .button:focus,
#logout:focus,
span#login_widget > .button.focus,
#logout.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
span#login_widget > .button:hover,
#logout:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
span#login_widget > .button:active,
#logout:active,
span#login_widget > .button.active,
#logout.active,
.open > .dropdown-togglespan#login_widget > .button,
.open > .dropdown-toggle#logout {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
span#login_widget > .button:active:hover,
#logout:active:hover,
span#login_widget > .button.active:hover,
#logout.active:hover,
.open > .dropdown-togglespan#login_widget > .button:hover,
.open > .dropdown-toggle#logout:hover,
span#login_widget > .button:active:focus,
#logout:active:focus,
span#login_widget > .button.active:focus,
#logout.active:focus,
.open > .dropdown-togglespan#login_widget > .button:focus,
.open > .dropdown-toggle#logout:focus,
span#login_widget > .button:active.focus,
#logout:active.focus,
span#login_widget > .button.active.focus,
#logout.active.focus,
.open > .dropdown-togglespan#login_widget > .button.focus,
.open > .dropdown-toggle#logout.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
span#login_widget > .button:active,
#logout:active,
span#login_widget > .button.active,
#logout.active,
.open > .dropdown-togglespan#login_widget > .button,
.open > .dropdown-toggle#logout {
  background-image: none;
}
span#login_widget > .button.disabled:hover,
#logout.disabled:hover,
span#login_widget > .button[disabled]:hover,
#logout[disabled]:hover,
fieldset[disabled] span#login_widget > .button:hover,
fieldset[disabled] #logout:hover,
span#login_widget > .button.disabled:focus,
#logout.disabled:focus,
span#login_widget > .button[disabled]:focus,
#logout[disabled]:focus,
fieldset[disabled] span#login_widget > .button:focus,
fieldset[disabled] #logout:focus,
span#login_widget > .button.disabled.focus,
#logout.disabled.focus,
span#login_widget > .button[disabled].focus,
#logout[disabled].focus,
fieldset[disabled] span#login_widget > .button.focus,
fieldset[disabled] #logout.focus {
  background-color: #fff;
  border-color: #ccc;
}
span#login_widget > .button .badge,
#logout .badge {
  color: #fff;
  background-color: #333;
}
.nav-header {
  text-transform: none;
}
#header > span {
  margin-top: 10px;
}
.modal_stretch .modal-dialog {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  min-height: 80vh;
}
.modal_stretch .modal-dialog .modal-body {
  max-height: calc(100vh - 200px);
  overflow: auto;
  flex: 1;
}
@media (min-width: 768px) {
  .modal .modal-dialog {
    width: 700px;
  }
}
@media (min-width: 768px) {
  select.form-control {
    margin-left: 12px;
    margin-right: 12px;
  }
}
/*!
*
* IPython auth
*
*/
.center-nav {
  display: inline-block;
  margin-bottom: -4px;
}
/*!
*
* IPython tree view
*
*/
/* We need an invisible input field on top of the sentense*/
/* "Drag file onto the list ..." */
.alternate_upload {
  background-color: none;
  display: inline;
}
.alternate_upload.form {
  padding: 0;
  margin: 0;
}
.alternate_upload input.fileinput {
  text-align: center;
  vertical-align: middle;
  display: inline;
  opacity: 0;
  z-index: 2;
  width: 12ex;
  margin-right: -12ex;
}
.alternate_upload .btn-upload {
  height: 22px;
}
/**
 * Primary styles
 *
 * Author: Jupyter Development Team
 */
[dir="rtl"] #tabs li {
  float: right;
}
ul#tabs {
  margin-bottom: 4px;
}
[dir="rtl"] ul#tabs {
  margin-right: 0px;
}
ul#tabs a {
  padding-top: 6px;
  padding-bottom: 4px;
}
ul.breadcrumb a:focus,
ul.breadcrumb a:hover {
  text-decoration: none;
}
ul.breadcrumb i.icon-home {
  font-size: 16px;
  margin-right: 4px;
}
ul.breadcrumb span {
  color: #5e5e5e;
}
.list_toolbar {
  padding: 4px 0 4px 0;
  vertical-align: middle;
}
.list_toolbar .tree-buttons {
  padding-top: 1px;
}
[dir="rtl"] .list_toolbar .tree-buttons {
  float: left !important;
}
[dir="rtl"] .list_toolbar .pull-right {
  padding-top: 1px;
  float: left !important;
}
[dir="rtl"] .list_toolbar .pull-left {
  float: right !important;
}
.dynamic-buttons {
  padding-top: 3px;
  display: inline-block;
}
.list_toolbar [class*="span"] {
  min-height: 24px;
}
.list_header {
  font-weight: bold;
  background-color: #EEE;
}
.list_placeholder {
  font-weight: bold;
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 7px;
  padding-right: 7px;
}
.list_container {
  margin-top: 4px;
  margin-bottom: 20px;
  border: 1px solid #ddd;
  border-radius: 2px;
}
.list_container > div {
  border-bottom: 1px solid #ddd;
}
.list_container > div:hover .list-item {
  background-color: red;
}
.list_container > div:last-child {
  border: none;
}
.list_item:hover .list_item {
  background-color: #ddd;
}
.list_item a {
  text-decoration: none;
}
.list_item:hover {
  background-color: #fafafa;
}
.list_header > div,
.list_item > div {
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 7px;
  padding-right: 7px;
  line-height: 22px;
}
.list_header > div input,
.list_item > div input {
  margin-right: 7px;
  margin-left: 14px;
  vertical-align: baseline;
  line-height: 22px;
  position: relative;
  top: -1px;
}
.list_header > div .item_link,
.list_item > div .item_link {
  margin-left: -1px;
  vertical-align: baseline;
  line-height: 22px;
}
.new-file input[type=checkbox] {
  visibility: hidden;
}
.item_name {
  line-height: 22px;
  height: 24px;
}
.item_icon {
  font-size: 14px;
  color: #5e5e5e;
  margin-right: 7px;
  margin-left: 7px;
  line-height: 22px;
  vertical-align: baseline;
}
.item_buttons {
  line-height: 1em;
  margin-left: -5px;
}
.item_buttons .btn,
.item_buttons .btn-group,
.item_buttons .input-group {
  float: left;
}
.item_buttons > .btn,
.item_buttons > .btn-group,
.item_buttons > .input-group {
  margin-left: 5px;
}
.item_buttons .btn {
  min-width: 13ex;
}
.item_buttons .running-indicator {
  padding-top: 4px;
  color: #5cb85c;
}
.item_buttons .kernel-name {
  padding-top: 4px;
  color: #5bc0de;
  margin-right: 7px;
  float: left;
}
.toolbar_info {
  height: 24px;
  line-height: 24px;
}
.list_item input:not([type=checkbox]) {
  padding-top: 3px;
  padding-bottom: 3px;
  height: 22px;
  line-height: 14px;
  margin: 0px;
}
.highlight_text {
  color: blue;
}
#project_name {
  display: inline-block;
  padding-left: 7px;
  margin-left: -2px;
}
#project_name > .breadcrumb {
  padding: 0px;
  margin-bottom: 0px;
  background-color: transparent;
  font-weight: bold;
}
#tree-selector {
  padding-right: 0px;
}
[dir="rtl"] #tree-selector a {
  float: right;
}
#button-select-all {
  min-width: 50px;
}
#select-all {
  margin-left: 7px;
  margin-right: 2px;
}
.menu_icon {
  margin-right: 2px;
}
.tab-content .row {
  margin-left: 0px;
  margin-right: 0px;
}
.folder_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f114";
}
.folder_icon:before.pull-left {
  margin-right: .3em;
}
.folder_icon:before.pull-right {
  margin-left: .3em;
}
.notebook_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f02d";
  position: relative;
  top: -1px;
}
.notebook_icon:before.pull-left {
  margin-right: .3em;
}
.notebook_icon:before.pull-right {
  margin-left: .3em;
}
.running_notebook_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f02d";
  position: relative;
  top: -1px;
  color: #5cb85c;
}
.running_notebook_icon:before.pull-left {
  margin-right: .3em;
}
.running_notebook_icon:before.pull-right {
  margin-left: .3em;
}
.file_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f016";
  position: relative;
  top: -2px;
}
.file_icon:before.pull-left {
  margin-right: .3em;
}
.file_icon:before.pull-right {
  margin-left: .3em;
}
#notebook_toolbar .pull-right {
  padding-top: 0px;
  margin-right: -1px;
}
ul#new-menu {
  left: auto;
  right: 0;
}
[dir="rtl"] #new-menu {
  text-align: right;
}
.kernel-menu-icon {
  padding-right: 12px;
  width: 24px;
  content: "\f096";
}
.kernel-menu-icon:before {
  content: "\f096";
}
.kernel-menu-icon-current:before {
  content: "\f00c";
}
#tab_content {
  padding-top: 20px;
}
#running .panel-group .panel {
  margin-top: 3px;
  margin-bottom: 1em;
}
#running .panel-group .panel .panel-heading {
  background-color: #EEE;
  padding-top: 4px;
  padding-bottom: 4px;
  padding-left: 7px;
  padding-right: 7px;
  line-height: 22px;
}
#running .panel-group .panel .panel-heading a:focus,
#running .panel-group .panel .panel-heading a:hover {
  text-decoration: none;
}
#running .panel-group .panel .panel-body {
  padding: 0px;
}
#running .panel-group .panel .panel-body .list_container {
  margin-top: 0px;
  margin-bottom: 0px;
  border: 0px;
  border-radius: 0px;
}
#running .panel-group .panel .panel-body .list_container .list_item {
  border-bottom: 1px solid #ddd;
}
#running .panel-group .panel .panel-body .list_container .list_item:last-child {
  border-bottom: 0px;
}
[dir="rtl"] #running .col-sm-8 {
  float: right !important;
}
.delete-button {
  display: none;
}
.duplicate-button {
  display: none;
}
.rename-button {
  display: none;
}
.shutdown-button {
  display: none;
}
.dynamic-instructions {
  display: inline-block;
  padding-top: 4px;
}
/*!
*
* IPython text editor webapp
*
*/
.selected-keymap i.fa {
  padding: 0px 5px;
}
.selected-keymap i.fa:before {
  content: "\f00c";
}
#mode-menu {
  overflow: auto;
  max-height: 20em;
}
.edit_app #header {
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
.edit_app #menubar .navbar {
  /* Use a negative 1 bottom margin, so the border overlaps the border of the
    header */
  margin-bottom: -1px;
}
.dirty-indicator {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 20px;
}
.dirty-indicator.pull-left {
  margin-right: .3em;
}
.dirty-indicator.pull-right {
  margin-left: .3em;
}
.dirty-indicator-dirty {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 20px;
}
.dirty-indicator-dirty.pull-left {
  margin-right: .3em;
}
.dirty-indicator-dirty.pull-right {
  margin-left: .3em;
}
.dirty-indicator-clean {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  width: 20px;
}
.dirty-indicator-clean.pull-left {
  margin-right: .3em;
}
.dirty-indicator-clean.pull-right {
  margin-left: .3em;
}
.dirty-indicator-clean:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f00c";
}
.dirty-indicator-clean:before.pull-left {
  margin-right: .3em;
}
.dirty-indicator-clean:before.pull-right {
  margin-left: .3em;
}
#filename {
  font-size: 16pt;
  display: table;
  padding: 0px 5px;
}
#current-mode {
  padding-left: 5px;
  padding-right: 5px;
}
#texteditor-backdrop {
  padding-top: 20px;
  padding-bottom: 20px;
}
@media not print {
  #texteditor-backdrop {
    background-color: #EEE;
  }
}
@media print {
  #texteditor-backdrop #texteditor-container .CodeMirror-gutter,
  #texteditor-backdrop #texteditor-container .CodeMirror-gutters {
    background-color: #fff;
  }
}
@media not print {
  #texteditor-backdrop #texteditor-container .CodeMirror-gutter,
  #texteditor-backdrop #texteditor-container .CodeMirror-gutters {
    background-color: #fff;
  }
}
@media not print {
  #texteditor-backdrop #texteditor-container {
    padding: 0px;
    background-color: #fff;
    -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
    box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  }
}
/*!
*
* IPython notebook
*
*/
/* CSS font colors for translated ANSI colors. */
.ansibold {
  font-weight: bold;
}
/* use dark versions for foreground, to improve visibility */
.ansiblack {
  color: black;
}
.ansired {
  color: darkred;
}
.ansigreen {
  color: darkgreen;
}
.ansiyellow {
  color: #c4a000;
}
.ansiblue {
  color: darkblue;
}
.ansipurple {
  color: darkviolet;
}
.ansicyan {
  color: steelblue;
}
.ansigray {
  color: gray;
}
/* and light for background, for the same reason */
.ansibgblack {
  background-color: black;
}
.ansibgred {
  background-color: red;
}
.ansibggreen {
  background-color: green;
}
.ansibgyellow {
  background-color: yellow;
}
.ansibgblue {
  background-color: blue;
}
.ansibgpurple {
  background-color: magenta;
}
.ansibgcyan {
  background-color: cyan;
}
.ansibggray {
  background-color: gray;
}
div.cell {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  border-radius: 2px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  border-width: 1px;
  border-style: solid;
  border-color: transparent;
  width: 100%;
  padding: 5px;
  /* This acts as a spacer between cells, that is outside the border */
  margin: 0px;
  outline: none;
  border-left-width: 1px;
  padding-left: 5px;
  background: linear-gradient(to right, transparent -40px, transparent 1px, transparent 1px, transparent 100%);
}
div.cell.jupyter-soft-selected {
  border-left-color: #90CAF9;
  border-left-color: #E3F2FD;
  border-left-width: 1px;
  padding-left: 5px;
  border-right-color: #E3F2FD;
  border-right-width: 1px;
  background: #E3F2FD;
}
@media print {
  div.cell.jupyter-soft-selected {
    border-color: transparent;
  }
}
div.cell.selected {
  border-color: #ababab;
  border-left-width: 0px;
  padding-left: 6px;
  background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 5px, transparent 5px, transparent 100%);
}
@media print {
  div.cell.selected {
    border-color: transparent;
  }
}
div.cell.selected.jupyter-soft-selected {
  border-left-width: 0;
  padding-left: 6px;
  background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 7px, #E3F2FD 7px, #E3F2FD 100%);
}
.edit_mode div.cell.selected {
  border-color: #66BB6A;
  border-left-width: 0px;
  padding-left: 6px;
  background: linear-gradient(to right, #66BB6A -40px, #66BB6A 5px, transparent 5px, transparent 100%);
}
@media print {
  .edit_mode div.cell.selected {
    border-color: transparent;
  }
}
.prompt {
  /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */
  min-width: 14ex;
  /* This padding is tuned to match the padding on the CodeMirror editor. */
  padding: 0.4em;
  margin: 0px;
  font-family: monospace;
  text-align: right;
  /* This has to match that of the the CodeMirror class line-height below */
  line-height: 1.21429em;
  /* Don't highlight prompt number selection */
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  /* Use default cursor */
  cursor: default;
}
@media (max-width: 540px) {
  .prompt {
    text-align: left;
  }
}
div.inner_cell {
  min-width: 0;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_area {
  border: 1px solid #cfcfcf;
  border-radius: 2px;
  background: #f7f7f7;
  line-height: 1.21429em;
}
/* This is needed so that empty prompt areas can collapse to zero height when there
   is no content in the output_subarea and the prompt. The main purpose of this is
   to make sure that empty JavaScript output_subareas have no height. */
div.prompt:empty {
  padding-top: 0;
  padding-bottom: 0;
}
div.unrecognized_cell {
  padding: 5px 5px 5px 0px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
div.unrecognized_cell .inner_cell {
  border-radius: 2px;
  padding: 5px;
  font-weight: bold;
  color: red;
  border: 1px solid #cfcfcf;
  background: #eaeaea;
}
div.unrecognized_cell .inner_cell a {
  color: inherit;
  text-decoration: none;
}
div.unrecognized_cell .inner_cell a:hover {
  color: inherit;
  text-decoration: none;
}
@media (max-width: 540px) {
  div.unrecognized_cell > div.prompt {
    display: none;
  }
}
div.code_cell {
  /* avoid page breaking on code cells when printing */
}
@media print {
  div.code_cell {
    page-break-inside: avoid;
  }
}
/* any special styling for code cells that are currently running goes here */
div.input {
  page-break-inside: avoid;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.input {
    /* Old browsers */
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-box-align: stretch;
    display: -moz-box;
    -moz-box-orient: vertical;
    -moz-box-align: stretch;
    display: box;
    box-orient: vertical;
    box-align: stretch;
    /* Modern browsers */
    display: flex;
    flex-direction: column;
    align-items: stretch;
  }
}
/* input_area and input_prompt must match in top border and margin for alignment */
div.input_prompt {
  color: #303F9F;
  border-top: 1px solid transparent;
}
div.input_area > div.highlight {
  margin: 0.4em;
  border: none;
  padding: 0px;
  background-color: transparent;
}
div.input_area > div.highlight > pre {
  margin: 0px;
  border: none;
  padding: 0px;
  background-color: transparent;
}
/* The following gets added to the <head> if it is detected that the user has a
 * monospace font with inconsistent normal/bold/italic height.  See
 * notebookmain.js.  Such fonts will have keywords vertically offset with
 * respect to the rest of the text.  The user should select a better font.
 * See: https://github.com/ipython/ipython/issues/1503
 *
 * .CodeMirror span {
 *      vertical-align: bottom;
 * }
 */
.CodeMirror {
  line-height: 1.21429em;
  /* Changed from 1em to our global default */
  font-size: 14px;
  height: auto;
  /* Changed to auto to autogrow */
  background: none;
  /* Changed from white to allow our bg to show through */
}
.CodeMirror-scroll {
  /*  The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/
  /*  We have found that if it is visible, vertical scrollbars appear with font size changes.*/
  overflow-y: hidden;
  overflow-x: auto;
}
.CodeMirror-lines {
  /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */
  /* we have set a different line-height and want this to scale with that. */
  padding: 0.4em;
}
.CodeMirror-linenumber {
  padding: 0 8px 0 4px;
}
.CodeMirror-gutters {
  border-bottom-left-radius: 2px;
  border-top-left-radius: 2px;
}
.CodeMirror pre {
  /* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */
  /* .CodeMirror-lines */
  padding: 0;
  border: 0;
  border-radius: 0;
}
/*

Original style from softwaremaniacs.org (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
Adapted from GitHub theme

*/
.highlight-base {
  color: #000;
}
.highlight-variable {
  color: #000;
}
.highlight-variable-2 {
  color: #1a1a1a;
}
.highlight-variable-3 {
  color: #333333;
}
.highlight-string {
  color: #BA2121;
}
.highlight-comment {
  color: #408080;
  font-style: italic;
}
.highlight-number {
  color: #080;
}
.highlight-atom {
  color: #88F;
}
.highlight-keyword {
  color: #008000;
  font-weight: bold;
}
.highlight-builtin {
  color: #008000;
}
.highlight-error {
  color: #f00;
}
.highlight-operator {
  color: #AA22FF;
  font-weight: bold;
}
.highlight-meta {
  color: #AA22FF;
}
/* previously not defined, copying from default codemirror */
.highlight-def {
  color: #00f;
}
.highlight-string-2 {
  color: #f50;
}
.highlight-qualifier {
  color: #555;
}
.highlight-bracket {
  color: #997;
}
.highlight-tag {
  color: #170;
}
.highlight-attribute {
  color: #00c;
}
.highlight-header {
  color: blue;
}
.highlight-quote {
  color: #090;
}
.highlight-link {
  color: #00c;
}
/* apply the same style to codemirror */
.cm-s-ipython span.cm-keyword {
  color: #008000;
  font-weight: bold;
}
.cm-s-ipython span.cm-atom {
  color: #88F;
}
.cm-s-ipython span.cm-number {
  color: #080;
}
.cm-s-ipython span.cm-def {
  color: #00f;
}
.cm-s-ipython span.cm-variable {
  color: #000;
}
.cm-s-ipython span.cm-operator {
  color: #AA22FF;
  font-weight: bold;
}
.cm-s-ipython span.cm-variable-2 {
  color: #1a1a1a;
}
.cm-s-ipython span.cm-variable-3 {
  color: #333333;
}
.cm-s-ipython span.cm-comment {
  color: #408080;
  font-style: italic;
}
.cm-s-ipython span.cm-string {
  color: #BA2121;
}
.cm-s-ipython span.cm-string-2 {
  color: #f50;
}
.cm-s-ipython span.cm-meta {
  color: #AA22FF;
}
.cm-s-ipython span.cm-qualifier {
  color: #555;
}
.cm-s-ipython span.cm-builtin {
  color: #008000;
}
.cm-s-ipython span.cm-bracket {
  color: #997;
}
.cm-s-ipython span.cm-tag {
  color: #170;
}
.cm-s-ipython span.cm-attribute {
  color: #00c;
}
.cm-s-ipython span.cm-header {
  color: blue;
}
.cm-s-ipython span.cm-quote {
  color: #090;
}
.cm-s-ipython span.cm-link {
  color: #00c;
}
.cm-s-ipython span.cm-error {
  color: #f00;
}
.cm-s-ipython span.cm-tab {
  background: url();
  background-position: right;
  background-repeat: no-repeat;
}
div.output_wrapper {
  /* this position must be relative to enable descendents to be absolute within it */
  position: relative;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  z-index: 1;
}
/* class for the output area when it should be height-limited */
div.output_scroll {
  /* ideally, this would be max-height, but FF barfs all over that */
  height: 24em;
  /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */
  width: 100%;
  overflow: auto;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
  box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);
  display: block;
}
/* output div while it is collapsed */
div.output_collapsed {
  margin: 0px;
  padding: 0px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
div.out_prompt_overlay {
  height: 100%;
  padding: 0px 0.4em;
  position: absolute;
  border-radius: 2px;
}
div.out_prompt_overlay:hover {
  /* use inner shadow to get border that is computed the same on WebKit/FF */
  -webkit-box-shadow: inset 0 0 1px #000;
  box-shadow: inset 0 0 1px #000;
  background: rgba(240, 240, 240, 0.5);
}
div.output_prompt {
  color: #D84315;
}
/* This class is the outer container of all output sections. */
div.output_area {
  padding: 0px;
  page-break-inside: avoid;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
div.output_area .MathJax_Display {
  text-align: left !important;
}
div.output_area .rendered_html table {
  margin-left: 0;
  margin-right: 0;
}
div.output_area .rendered_html img {
  margin-left: 0;
  margin-right: 0;
}
div.output_area img,
div.output_area svg {
  max-width: 100%;
  height: auto;
}
div.output_area img.unconfined,
div.output_area svg.unconfined {
  max-width: none;
}
/* This is needed to protect the pre formating from global settings such
   as that of bootstrap */
.output {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: vertical;
  -moz-box-align: stretch;
  display: box;
  box-orient: vertical;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: column;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.output_area {
    /* Old browsers */
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-box-align: stretch;
    display: -moz-box;
    -moz-box-orient: vertical;
    -moz-box-align: stretch;
    display: box;
    box-orient: vertical;
    box-align: stretch;
    /* Modern browsers */
    display: flex;
    flex-direction: column;
    align-items: stretch;
  }
}
div.output_area pre {
  margin: 0;
  padding: 0;
  border: 0;
  vertical-align: baseline;
  color: black;
  background-color: transparent;
  border-radius: 0;
}
/* This class is for the output subarea inside the output_area and after
   the prompt div. */
div.output_subarea {
  overflow-x: auto;
  padding: 0.4em;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
  max-width: calc(100% - 14ex);
}
div.output_scroll div.output_subarea {
  overflow-x: visible;
}
/* The rest of the output_* classes are for special styling of the different
   output types */
/* all text output has this class: */
div.output_text {
  text-align: left;
  color: #000;
  /* This has to match that of the the CodeMirror class line-height below */
  line-height: 1.21429em;
}
/* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */
div.output_stderr {
  background: #fdd;
  /* very light red background for stderr */
}
div.output_latex {
  text-align: left;
}
/* Empty output_javascript divs should have no height */
div.output_javascript:empty {
  padding: 0;
}
.js-error {
  color: darkred;
}
/* raw_input styles */
div.raw_input_container {
  line-height: 1.21429em;
  padding-top: 5px;
}
pre.raw_input_prompt {
  /* nothing needed here. */
}
input.raw_input {
  font-family: monospace;
  font-size: inherit;
  color: inherit;
  width: auto;
  /* make sure input baseline aligns with prompt */
  vertical-align: baseline;
  /* padding + margin = 0.5em between prompt and cursor */
  padding: 0em 0.25em;
  margin: 0em 0.25em;
}
input.raw_input:focus {
  box-shadow: none;
}
p.p-space {
  margin-bottom: 10px;
}
div.output_unrecognized {
  padding: 5px;
  font-weight: bold;
  color: red;
}
div.output_unrecognized a {
  color: inherit;
  text-decoration: none;
}
div.output_unrecognized a:hover {
  color: inherit;
  text-decoration: none;
}
.rendered_html {
  color: #000;
  /* any extras will just be numbers: */
}
.rendered_html em {
  font-style: italic;
}
.rendered_html strong {
  font-weight: bold;
}
.rendered_html u {
  text-decoration: underline;
}
.rendered_html :link {
  text-decoration: underline;
}
.rendered_html :visited {
  text-decoration: underline;
}
.rendered_html h1 {
  font-size: 185.7%;
  margin: 1.08em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h2 {
  font-size: 157.1%;
  margin: 1.27em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h3 {
  font-size: 128.6%;
  margin: 1.55em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h4 {
  font-size: 100%;
  margin: 2em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
}
.rendered_html h5 {
  font-size: 100%;
  margin: 2em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
  font-style: italic;
}
.rendered_html h6 {
  font-size: 100%;
  margin: 2em 0 0 0;
  font-weight: bold;
  line-height: 1.0;
  font-style: italic;
}
.rendered_html h1:first-child {
  margin-top: 0.538em;
}
.rendered_html h2:first-child {
  margin-top: 0.636em;
}
.rendered_html h3:first-child {
  margin-top: 0.777em;
}
.rendered_html h4:first-child {
  margin-top: 1em;
}
.rendered_html h5:first-child {
  margin-top: 1em;
}
.rendered_html h6:first-child {
  margin-top: 1em;
}
.rendered_html ul {
  list-style: disc;
  margin: 0em 2em;
  padding-left: 0px;
}
.rendered_html ul ul {
  list-style: square;
  margin: 0em 2em;
}
.rendered_html ul ul ul {
  list-style: circle;
  margin: 0em 2em;
}
.rendered_html ol {
  list-style: decimal;
  margin: 0em 2em;
  padding-left: 0px;
}
.rendered_html ol ol {
  list-style: upper-alpha;
  margin: 0em 2em;
}
.rendered_html ol ol ol {
  list-style: lower-alpha;
  margin: 0em 2em;
}
.rendered_html ol ol ol ol {
  list-style: lower-roman;
  margin: 0em 2em;
}
.rendered_html ol ol ol ol ol {
  list-style: decimal;
  margin: 0em 2em;
}
.rendered_html * + ul {
  margin-top: 1em;
}
.rendered_html * + ol {
  margin-top: 1em;
}
.rendered_html hr {
  color: black;
  background-color: black;
}
.rendered_html pre {
  margin: 1em 2em;
}
.rendered_html pre,
.rendered_html code {
  border: 0;
  background-color: #fff;
  color: #000;
  font-size: 100%;
  padding: 0px;
}
.rendered_html blockquote {
  margin: 1em 2em;
}
.rendered_html table {
  margin-left: auto;
  margin-right: auto;
  border: 1px solid black;
  border-collapse: collapse;
}
.rendered_html tr,
.rendered_html th,
.rendered_html td {
  border: 1px solid black;
  border-collapse: collapse;
  margin: 1em 2em;
}
.rendered_html td,
.rendered_html th {
  text-align: left;
  vertical-align: middle;
  padding: 4px;
}
.rendered_html th {
  font-weight: bold;
}
.rendered_html * + table {
  margin-top: 1em;
}
.rendered_html p {
  text-align: left;
}
.rendered_html * + p {
  margin-top: 1em;
}
.rendered_html img {
  display: block;
  margin-left: auto;
  margin-right: auto;
}
.rendered_html * + img {
  margin-top: 1em;
}
.rendered_html img,
.rendered_html svg {
  max-width: 100%;
  height: auto;
}
.rendered_html img.unconfined,
.rendered_html svg.unconfined {
  max-width: none;
}
div.text_cell {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
}
@media (max-width: 540px) {
  div.text_cell > div.prompt {
    display: none;
  }
}
div.text_cell_render {
  /*font-family: "Helvetica Neue", Arial, Helvetica, Geneva, sans-serif;*/
  outline: none;
  resize: none;
  width: inherit;
  border-style: none;
  padding: 0.5em 0.5em 0.5em 0.4em;
  color: #000;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
a.anchor-link:link {
  text-decoration: none;
  padding: 0px 20px;
  visibility: hidden;
}
h1:hover .anchor-link,
h2:hover .anchor-link,
h3:hover .anchor-link,
h4:hover .anchor-link,
h5:hover .anchor-link,
h6:hover .anchor-link {
  visibility: visible;
}
.text_cell.rendered .input_area {
  display: none;
}
.text_cell.rendered .rendered_html {
  overflow-x: auto;
  overflow-y: hidden;
}
.text_cell.unrendered .text_cell_render {
  display: none;
}
.cm-header-1,
.cm-header-2,
.cm-header-3,
.cm-header-4,
.cm-header-5,
.cm-header-6 {
  font-weight: bold;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
.cm-header-1 {
  font-size: 185.7%;
}
.cm-header-2 {
  font-size: 157.1%;
}
.cm-header-3 {
  font-size: 128.6%;
}
.cm-header-4 {
  font-size: 110%;
}
.cm-header-5 {
  font-size: 100%;
  font-style: italic;
}
.cm-header-6 {
  font-size: 100%;
  font-style: italic;
}
/*!
*
* IPython notebook webapp
*
*/
@media (max-width: 767px) {
  .notebook_app {
    padding-left: 0px;
    padding-right: 0px;
  }
}
#ipython-main-app {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  height: 100%;
}
div#notebook_panel {
  margin: 0px;
  padding: 0px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  height: 100%;
}
div#notebook {
  font-size: 14px;
  line-height: 20px;
  overflow-y: hidden;
  overflow-x: auto;
  width: 100%;
  /* This spaces the page away from the edge of the notebook area */
  padding-top: 20px;
  margin: 0px;
  outline: none;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  min-height: 100%;
}
@media not print {
  #notebook-container {
    padding: 15px;
    background-color: #fff;
    min-height: 0;
    -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
    box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  }
}
@media print {
  #notebook-container {
    width: 100%;
  }
}
div.ui-widget-content {
  border: 1px solid #ababab;
  outline: none;
}
pre.dialog {
  background-color: #f7f7f7;
  border: 1px solid #ddd;
  border-radius: 2px;
  padding: 0.4em;
  padding-left: 2em;
}
p.dialog {
  padding: 0.2em;
}
/* Word-wrap output correctly.  This is the CSS3 spelling, though Firefox seems
   to not honor it correctly.  Webkit browsers (Chrome, rekonq, Safari) do.
 */
pre,
code,
kbd,
samp {
  white-space: pre-wrap;
}
#fonttest {
  font-family: monospace;
}
p {
  margin-bottom: 0;
}
.end_space {
  min-height: 100px;
  transition: height .2s ease;
}
.notebook_app > #header {
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
@media not print {
  .notebook_app {
    background-color: #EEE;
  }
}
kbd {
  border-style: solid;
  border-width: 1px;
  box-shadow: none;
  margin: 2px;
  padding-left: 2px;
  padding-right: 2px;
  padding-top: 1px;
  padding-bottom: 1px;
}
/* CSS for the cell toolbar */
.celltoolbar {
  border: thin solid #CFCFCF;
  border-bottom: none;
  background: #EEE;
  border-radius: 2px 2px 0px 0px;
  width: 100%;
  height: 29px;
  padding-right: 4px;
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
  /* Old browsers */
  -webkit-box-pack: end;
  -moz-box-pack: end;
  box-pack: end;
  /* Modern browsers */
  justify-content: flex-end;
  display: -webkit-flex;
}
@media print {
  .celltoolbar {
    display: none;
  }
}
.ctb_hideshow {
  display: none;
  vertical-align: bottom;
}
/* ctb_show is added to the ctb_hideshow div to show the cell toolbar.
   Cell toolbars are only shown when the ctb_global_show class is also set.
*/
.ctb_global_show .ctb_show.ctb_hideshow {
  display: block;
}
.ctb_global_show .ctb_show + .input_area,
.ctb_global_show .ctb_show + div.text_cell_input,
.ctb_global_show .ctb_show ~ div.text_cell_render {
  border-top-right-radius: 0px;
  border-top-left-radius: 0px;
}
.ctb_global_show .ctb_show ~ div.text_cell_render {
  border: 1px solid #cfcfcf;
}
.celltoolbar {
  font-size: 87%;
  padding-top: 3px;
}
.celltoolbar select {
  display: block;
  width: 100%;
  height: 32px;
  padding: 6px 12px;
  font-size: 13px;
  line-height: 1.42857143;
  color: #555555;
  background-color: #fff;
  background-image: none;
  border: 1px solid #ccc;
  border-radius: 2px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 1px;
  width: inherit;
  font-size: inherit;
  height: 22px;
  padding: 0px;
  display: inline-block;
}
.celltoolbar select:focus {
  border-color: #66afe9;
  outline: 0;
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
}
.celltoolbar select::-moz-placeholder {
  color: #999;
  opacity: 1;
}
.celltoolbar select:-ms-input-placeholder {
  color: #999;
}
.celltoolbar select::-webkit-input-placeholder {
  color: #999;
}
.celltoolbar select::-ms-expand {
  border: 0;
  background-color: transparent;
}
.celltoolbar select[disabled],
.celltoolbar select[readonly],
fieldset[disabled] .celltoolbar select {
  background-color: #eeeeee;
  opacity: 1;
}
.celltoolbar select[disabled],
fieldset[disabled] .celltoolbar select {
  cursor: not-allowed;
}
textarea.celltoolbar select {
  height: auto;
}
select.celltoolbar select {
  height: 30px;
  line-height: 30px;
}
textarea.celltoolbar select,
select[multiple].celltoolbar select {
  height: auto;
}
.celltoolbar label {
  margin-left: 5px;
  margin-right: 5px;
}
.completions {
  position: absolute;
  z-index: 110;
  overflow: hidden;
  border: 1px solid #ababab;
  border-radius: 2px;
  -webkit-box-shadow: 0px 6px 10px -1px #adadad;
  box-shadow: 0px 6px 10px -1px #adadad;
  line-height: 1;
}
.completions select {
  background: white;
  outline: none;
  border: none;
  padding: 0px;
  margin: 0px;
  overflow: auto;
  font-family: monospace;
  font-size: 110%;
  color: #000;
  width: auto;
}
.completions select option.context {
  color: #286090;
}
#kernel_logo_widget {
  float: right !important;
  float: right;
}
#kernel_logo_widget .current_kernel_logo {
  display: none;
  margin-top: -1px;
  margin-bottom: -1px;
  width: 32px;
  height: 32px;
}
#menubar {
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  margin-top: 1px;
}
#menubar .navbar {
  border-top: 1px;
  border-radius: 0px 0px 2px 2px;
  margin-bottom: 0px;
}
#menubar .navbar-toggle {
  float: left;
  padding-top: 7px;
  padding-bottom: 7px;
  border: none;
}
#menubar .navbar-collapse {
  clear: left;
}
.nav-wrapper {
  border-bottom: 1px solid #e7e7e7;
}
i.menu-icon {
  padding-top: 4px;
}
ul#help_menu li a {
  overflow: hidden;
  padding-right: 2.2em;
}
ul#help_menu li a i {
  margin-right: -1.2em;
}
.dropdown-submenu {
  position: relative;
}
.dropdown-submenu > .dropdown-menu {
  top: 0;
  left: 100%;
  margin-top: -6px;
  margin-left: -1px;
}
.dropdown-submenu:hover > .dropdown-menu {
  display: block;
}
.dropdown-submenu > a:after {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  display: block;
  content: "\f0da";
  float: right;
  color: #333333;
  margin-top: 2px;
  margin-right: -10px;
}
.dropdown-submenu > a:after.pull-left {
  margin-right: .3em;
}
.dropdown-submenu > a:after.pull-right {
  margin-left: .3em;
}
.dropdown-submenu:hover > a:after {
  color: #262626;
}
.dropdown-submenu.pull-left {
  float: none;
}
.dropdown-submenu.pull-left > .dropdown-menu {
  left: -100%;
  margin-left: 10px;
}
#notification_area {
  float: right !important;
  float: right;
  z-index: 10;
}
.indicator_area {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
}
#kernel_indicator {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
  border-left: 1px solid;
}
#kernel_indicator .kernel_indicator_name {
  padding-left: 5px;
  padding-right: 5px;
}
#modal_indicator {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
}
#readonly-indicator {
  float: right !important;
  float: right;
  color: #777;
  margin-left: 5px;
  margin-right: 5px;
  width: 11px;
  z-index: 10;
  text-align: center;
  width: auto;
  margin-top: 2px;
  margin-bottom: 0px;
  margin-left: 0px;
  margin-right: 0px;
  display: none;
}
.modal_indicator:before {
  width: 1.28571429em;
  text-align: center;
}
.edit_mode .modal_indicator:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f040";
}
.edit_mode .modal_indicator:before.pull-left {
  margin-right: .3em;
}
.edit_mode .modal_indicator:before.pull-right {
  margin-left: .3em;
}
.command_mode .modal_indicator:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: ' ';
}
.command_mode .modal_indicator:before.pull-left {
  margin-right: .3em;
}
.command_mode .modal_indicator:before.pull-right {
  margin-left: .3em;
}
.kernel_idle_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f10c";
}
.kernel_idle_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_idle_icon:before.pull-right {
  margin-left: .3em;
}
.kernel_busy_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f111";
}
.kernel_busy_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_busy_icon:before.pull-right {
  margin-left: .3em;
}
.kernel_dead_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f1e2";
}
.kernel_dead_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_dead_icon:before.pull-right {
  margin-left: .3em;
}
.kernel_disconnected_icon:before {
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  content: "\f127";
}
.kernel_disconnected_icon:before.pull-left {
  margin-right: .3em;
}
.kernel_disconnected_icon:before.pull-right {
  margin-left: .3em;
}
.notification_widget {
  color: #777;
  z-index: 10;
  background: rgba(240, 240, 240, 0.5);
  margin-right: 4px;
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
.notification_widget:focus,
.notification_widget.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
.notification_widget:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.notification_widget:active,
.notification_widget.active,
.open > .dropdown-toggle.notification_widget {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
.notification_widget:active:hover,
.notification_widget.active:hover,
.open > .dropdown-toggle.notification_widget:hover,
.notification_widget:active:focus,
.notification_widget.active:focus,
.open > .dropdown-toggle.notification_widget:focus,
.notification_widget:active.focus,
.notification_widget.active.focus,
.open > .dropdown-toggle.notification_widget.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
.notification_widget:active,
.notification_widget.active,
.open > .dropdown-toggle.notification_widget {
  background-image: none;
}
.notification_widget.disabled:hover,
.notification_widget[disabled]:hover,
fieldset[disabled] .notification_widget:hover,
.notification_widget.disabled:focus,
.notification_widget[disabled]:focus,
fieldset[disabled] .notification_widget:focus,
.notification_widget.disabled.focus,
.notification_widget[disabled].focus,
fieldset[disabled] .notification_widget.focus {
  background-color: #fff;
  border-color: #ccc;
}
.notification_widget .badge {
  color: #fff;
  background-color: #333;
}
.notification_widget.warning {
  color: #fff;
  background-color: #f0ad4e;
  border-color: #eea236;
}
.notification_widget.warning:focus,
.notification_widget.warning.focus {
  color: #fff;
  background-color: #ec971f;
  border-color: #985f0d;
}
.notification_widget.warning:hover {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.notification_widget.warning:active,
.notification_widget.warning.active,
.open > .dropdown-toggle.notification_widget.warning {
  color: #fff;
  background-color: #ec971f;
  border-color: #d58512;
}
.notification_widget.warning:active:hover,
.notification_widget.warning.active:hover,
.open > .dropdown-toggle.notification_widget.warning:hover,
.notification_widget.warning:active:focus,
.notification_widget.warning.active:focus,
.open > .dropdown-toggle.notification_widget.warning:focus,
.notification_widget.warning:active.focus,
.notification_widget.warning.active.focus,
.open > .dropdown-toggle.notification_widget.warning.focus {
  color: #fff;
  background-color: #d58512;
  border-color: #985f0d;
}
.notification_widget.warning:active,
.notification_widget.warning.active,
.open > .dropdown-toggle.notification_widget.warning {
  background-image: none;
}
.notification_widget.warning.disabled:hover,
.notification_widget.warning[disabled]:hover,
fieldset[disabled] .notification_widget.warning:hover,
.notification_widget.warning.disabled:focus,
.notification_widget.warning[disabled]:focus,
fieldset[disabled] .notification_widget.warning:focus,
.notification_widget.warning.disabled.focus,
.notification_widget.warning[disabled].focus,
fieldset[disabled] .notification_widget.warning.focus {
  background-color: #f0ad4e;
  border-color: #eea236;
}
.notification_widget.warning .badge {
  color: #f0ad4e;
  background-color: #fff;
}
.notification_widget.success {
  color: #fff;
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.notification_widget.success:focus,
.notification_widget.success.focus {
  color: #fff;
  background-color: #449d44;
  border-color: #255625;
}
.notification_widget.success:hover {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.notification_widget.success:active,
.notification_widget.success.active,
.open > .dropdown-toggle.notification_widget.success {
  color: #fff;
  background-color: #449d44;
  border-color: #398439;
}
.notification_widget.success:active:hover,
.notification_widget.success.active:hover,
.open > .dropdown-toggle.notification_widget.success:hover,
.notification_widget.success:active:focus,
.notification_widget.success.active:focus,
.open > .dropdown-toggle.notification_widget.success:focus,
.notification_widget.success:active.focus,
.notification_widget.success.active.focus,
.open > .dropdown-toggle.notification_widget.success.focus {
  color: #fff;
  background-color: #398439;
  border-color: #255625;
}
.notification_widget.success:active,
.notification_widget.success.active,
.open > .dropdown-toggle.notification_widget.success {
  background-image: none;
}
.notification_widget.success.disabled:hover,
.notification_widget.success[disabled]:hover,
fieldset[disabled] .notification_widget.success:hover,
.notification_widget.success.disabled:focus,
.notification_widget.success[disabled]:focus,
fieldset[disabled] .notification_widget.success:focus,
.notification_widget.success.disabled.focus,
.notification_widget.success[disabled].focus,
fieldset[disabled] .notification_widget.success.focus {
  background-color: #5cb85c;
  border-color: #4cae4c;
}
.notification_widget.success .badge {
  color: #5cb85c;
  background-color: #fff;
}
.notification_widget.info {
  color: #fff;
  background-color: #5bc0de;
  border-color: #46b8da;
}
.notification_widget.info:focus,
.notification_widget.info.focus {
  color: #fff;
  background-color: #31b0d5;
  border-color: #1b6d85;
}
.notification_widget.info:hover {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.notification_widget.info:active,
.notification_widget.info.active,
.open > .dropdown-toggle.notification_widget.info {
  color: #fff;
  background-color: #31b0d5;
  border-color: #269abc;
}
.notification_widget.info:active:hover,
.notification_widget.info.active:hover,
.open > .dropdown-toggle.notification_widget.info:hover,
.notification_widget.info:active:focus,
.notification_widget.info.active:focus,
.open > .dropdown-toggle.notification_widget.info:focus,
.notification_widget.info:active.focus,
.notification_widget.info.active.focus,
.open > .dropdown-toggle.notification_widget.info.focus {
  color: #fff;
  background-color: #269abc;
  border-color: #1b6d85;
}
.notification_widget.info:active,
.notification_widget.info.active,
.open > .dropdown-toggle.notification_widget.info {
  background-image: none;
}
.notification_widget.info.disabled:hover,
.notification_widget.info[disabled]:hover,
fieldset[disabled] .notification_widget.info:hover,
.notification_widget.info.disabled:focus,
.notification_widget.info[disabled]:focus,
fieldset[disabled] .notification_widget.info:focus,
.notification_widget.info.disabled.focus,
.notification_widget.info[disabled].focus,
fieldset[disabled] .notification_widget.info.focus {
  background-color: #5bc0de;
  border-color: #46b8da;
}
.notification_widget.info .badge {
  color: #5bc0de;
  background-color: #fff;
}
.notification_widget.danger {
  color: #fff;
  background-color: #d9534f;
  border-color: #d43f3a;
}
.notification_widget.danger:focus,
.notification_widget.danger.focus {
  color: #fff;
  background-color: #c9302c;
  border-color: #761c19;
}
.notification_widget.danger:hover {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.notification_widget.danger:active,
.notification_widget.danger.active,
.open > .dropdown-toggle.notification_widget.danger {
  color: #fff;
  background-color: #c9302c;
  border-color: #ac2925;
}
.notification_widget.danger:active:hover,
.notification_widget.danger.active:hover,
.open > .dropdown-toggle.notification_widget.danger:hover,
.notification_widget.danger:active:focus,
.notification_widget.danger.active:focus,
.open > .dropdown-toggle.notification_widget.danger:focus,
.notification_widget.danger:active.focus,
.notification_widget.danger.active.focus,
.open > .dropdown-toggle.notification_widget.danger.focus {
  color: #fff;
  background-color: #ac2925;
  border-color: #761c19;
}
.notification_widget.danger:active,
.notification_widget.danger.active,
.open > .dropdown-toggle.notification_widget.danger {
  background-image: none;
}
.notification_widget.danger.disabled:hover,
.notification_widget.danger[disabled]:hover,
fieldset[disabled] .notification_widget.danger:hover,
.notification_widget.danger.disabled:focus,
.notification_widget.danger[disabled]:focus,
fieldset[disabled] .notification_widget.danger:focus,
.notification_widget.danger.disabled.focus,
.notification_widget.danger[disabled].focus,
fieldset[disabled] .notification_widget.danger.focus {
  background-color: #d9534f;
  border-color: #d43f3a;
}
.notification_widget.danger .badge {
  color: #d9534f;
  background-color: #fff;
}
div#pager {
  background-color: #fff;
  font-size: 14px;
  line-height: 20px;
  overflow: hidden;
  display: none;
  position: fixed;
  bottom: 0px;
  width: 100%;
  max-height: 50%;
  padding-top: 8px;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  /* Display over codemirror */
  z-index: 100;
  /* Hack which prevents jquery ui resizable from changing top. */
  top: auto !important;
}
div#pager pre {
  line-height: 1.21429em;
  color: #000;
  background-color: #f7f7f7;
  padding: 0.4em;
}
div#pager #pager-button-area {
  position: absolute;
  top: 8px;
  right: 20px;
}
div#pager #pager-contents {
  position: relative;
  overflow: auto;
  width: 100%;
  height: 100%;
}
div#pager #pager-contents #pager-container {
  position: relative;
  padding: 15px 0px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
div#pager .ui-resizable-handle {
  top: 0px;
  height: 8px;
  background: #f7f7f7;
  border-top: 1px solid #cfcfcf;
  border-bottom: 1px solid #cfcfcf;
  /* This injects handle bars (a short, wide = symbol) for 
        the resize handle. */
}
div#pager .ui-resizable-handle::after {
  content: '';
  top: 2px;
  left: 50%;
  height: 3px;
  width: 30px;
  margin-left: -15px;
  position: absolute;
  border-top: 1px solid #cfcfcf;
}
.quickhelp {
  /* Old browsers */
  display: -webkit-box;
  -webkit-box-orient: horizontal;
  -webkit-box-align: stretch;
  display: -moz-box;
  -moz-box-orient: horizontal;
  -moz-box-align: stretch;
  display: box;
  box-orient: horizontal;
  box-align: stretch;
  /* Modern browsers */
  display: flex;
  flex-direction: row;
  align-items: stretch;
  line-height: 1.8em;
}
.shortcut_key {
  display: inline-block;
  width: 21ex;
  text-align: right;
  font-family: monospace;
}
.shortcut_descr {
  display: inline-block;
  /* Old browsers */
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  box-flex: 1;
  /* Modern browsers */
  flex: 1;
}
span.save_widget {
  margin-top: 6px;
}
span.save_widget span.filename {
  height: 1em;
  line-height: 1em;
  padding: 3px;
  margin-left: 16px;
  border: none;
  font-size: 146.5%;
  border-radius: 2px;
}
span.save_widget span.filename:hover {
  background-color: #e6e6e6;
}
span.checkpoint_status,
span.autosave_status {
  font-size: small;
}
@media (max-width: 767px) {
  span.save_widget {
    font-size: small;
  }
  span.checkpoint_status,
  span.autosave_status {
    display: none;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  span.checkpoint_status {
    display: none;
  }
  span.autosave_status {
    font-size: x-small;
  }
}
.toolbar {
  padding: 0px;
  margin-left: -5px;
  margin-top: 2px;
  margin-bottom: 5px;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}
.toolbar select,
.toolbar label {
  width: auto;
  vertical-align: middle;
  margin-right: 2px;
  margin-bottom: 0px;
  display: inline;
  font-size: 92%;
  margin-left: 0.3em;
  margin-right: 0.3em;
  padding: 0px;
  padding-top: 3px;
}
.toolbar .btn {
  padding: 2px 8px;
}
.toolbar .btn-group {
  margin-top: 0px;
  margin-left: 5px;
}
#maintoolbar {
  margin-bottom: -3px;
  margin-top: -8px;
  border: 0px;
  min-height: 27px;
  margin-left: 0px;
  padding-top: 11px;
  padding-bottom: 3px;
}
#maintoolbar .navbar-text {
  float: none;
  vertical-align: middle;
  text-align: right;
  margin-left: 5px;
  margin-right: 0px;
  margin-top: 0px;
}
.select-xs {
  height: 24px;
}
.pulse,
.dropdown-menu > li > a.pulse,
li.pulse > a.dropdown-toggle,
li.pulse.open > a.dropdown-toggle {
  background-color: #F37626;
  color: white;
}
/**
 * Primary styles
 *
 * Author: Jupyter Development Team
 */
/** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot
 * of chance of beeing generated from the ../less/[samename].less file, you can
 * try to get back the less file by reverting somme commit in history
 **/
/*
 * We'll try to get something pretty, so we
 * have some strange css to have the scroll bar on
 * the left with fix button on the top right of the tooltip
 */
@-moz-keyframes fadeOut {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@-webkit-keyframes fadeOut {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
@-moz-keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@-webkit-keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
/*properties of tooltip after "expand"*/
.bigtooltip {
  overflow: auto;
  height: 200px;
  -webkit-transition-property: height;
  -webkit-transition-duration: 500ms;
  -moz-transition-property: height;
  -moz-transition-duration: 500ms;
  transition-property: height;
  transition-duration: 500ms;
}
/*properties of tooltip before "expand"*/
.smalltooltip {
  -webkit-transition-property: height;
  -webkit-transition-duration: 500ms;
  -moz-transition-property: height;
  -moz-transition-duration: 500ms;
  transition-property: height;
  transition-duration: 500ms;
  text-overflow: ellipsis;
  overflow: hidden;
  height: 80px;
}
.tooltipbuttons {
  position: absolute;
  padding-right: 15px;
  top: 0px;
  right: 0px;
}
.tooltiptext {
  /*avoid the button to overlap on some docstring*/
  padding-right: 30px;
}
.ipython_tooltip {
  max-width: 700px;
  /*fade-in animation when inserted*/
  -webkit-animation: fadeOut 400ms;
  -moz-animation: fadeOut 400ms;
  animation: fadeOut 400ms;
  -webkit-animation: fadeIn 400ms;
  -moz-animation: fadeIn 400ms;
  animation: fadeIn 400ms;
  vertical-align: middle;
  background-color: #f7f7f7;
  overflow: visible;
  border: #ababab 1px solid;
  outline: none;
  padding: 3px;
  margin: 0px;
  padding-left: 7px;
  font-family: monospace;
  min-height: 50px;
  -moz-box-shadow: 0px 6px 10px -1px #adadad;
  -webkit-box-shadow: 0px 6px 10px -1px #adadad;
  box-shadow: 0px 6px 10px -1px #adadad;
  border-radius: 2px;
  position: absolute;
  z-index: 1000;
}
.ipython_tooltip a {
  float: right;
}
.ipython_tooltip .tooltiptext pre {
  border: 0;
  border-radius: 0;
  font-size: 100%;
  background-color: #f7f7f7;
}
.pretooltiparrow {
  left: 0px;
  margin: 0px;
  top: -16px;
  width: 40px;
  height: 16px;
  overflow: hidden;
  position: absolute;
}
.pretooltiparrow:before {
  background-color: #f7f7f7;
  border: 1px #ababab solid;
  z-index: 11;
  content: "";
  position: absolute;
  left: 15px;
  top: 10px;
  width: 25px;
  height: 25px;
  -webkit-transform: rotate(45deg);
  -moz-transform: rotate(45deg);
  -ms-transform: rotate(45deg);
  -o-transform: rotate(45deg);
}
ul.typeahead-list i {
  margin-left: -10px;
  width: 18px;
}
ul.typeahead-list {
  max-height: 80vh;
  overflow: auto;
}
ul.typeahead-list > li > a {
  /** Firefox bug **/
  /* see https://github.com/jupyter/notebook/issues/559 */
  white-space: normal;
}
.cmd-palette .modal-body {
  padding: 7px;
}
.cmd-palette form {
  background: white;
}
.cmd-palette input {
  outline: none;
}
.no-shortcut {
  display: none;
}
.command-shortcut:before {
  content: "(command)";
  padding-right: 3px;
  color: #777777;
}
.edit-shortcut:before {
  content: "(edit)";
  padding-right: 3px;
  color: #777777;
}
#find-and-replace #replace-preview .match,
#find-and-replace #replace-preview .insert {
  background-color: #BBDEFB;
  border-color: #90CAF9;
  border-style: solid;
  border-width: 1px;
  border-radius: 0px;
}
#find-and-replace #replace-preview .replace .match {
  background-color: #FFCDD2;
  border-color: #EF9A9A;
  border-radius: 0px;
}
#find-and-replace #replace-preview .replace .insert {
  background-color: #C8E6C9;
  border-color: #A5D6A7;
  border-radius: 0px;
}
#find-and-replace #replace-preview {
  max-height: 60vh;
  overflow: auto;
}
#find-and-replace #replace-preview pre {
  padding: 5px 10px;
}
.terminal-app {
  background: #EEE;
}
.terminal-app #header {
  background: #fff;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);
}
.terminal-app .terminal {
  width: 100%;
  float: left;
  font-family: monospace;
  color: white;
  background: black;
  padding: 0.4em;
  border-radius: 2px;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);
}
.terminal-app .terminal,
.terminal-app .terminal dummy-screen {
  line-height: 1em;
  font-size: 14px;
}
.terminal-app .terminal .xterm-rows {
  padding: 10px;
}
.terminal-app .terminal-cursor {
  color: black;
  background: white;
}
.terminal-app #terminado-container {
  margin-top: 20px;
}
/*# sourceMappingURL=style.min.css.map */
    </style>
<style type="text/css">
    .highlight .hll { background-color: #ffffcc }
.highlight  { background: #f8f8f8; }
.highlight .c { color: #408080; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #B00040 } /* Keyword.Type */
.highlight .m { color: #666666 } /* Literal.Number */
.highlight .s { color: #BA2121 } /* Literal.String */
.highlight .na { color: #7D9029 } /* Name.Attribute */
.highlight .nb { color: #008000 } /* Name.Builtin */
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.highlight .no { color: #880000 } /* Name.Constant */
.highlight .nd { color: #AA22FF } /* Name.Decorator */
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0000FF } /* Name.Function */
.highlight .nl { color: #A0A000 } /* Name.Label */
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #19177C } /* Name.Variable */
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
.highlight .mf { color: #666666 } /* Literal.Number.Float */
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.highlight .sx { color: #008000 } /* Literal.String.Other */
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0000FF } /* Name.Function.Magic */
.highlight .vc { color: #19177C } /* Name.Variable.Class */
.highlight .vg { color: #19177C } /* Name.Variable.Global */
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
    </style>
<style type="text/css">
    
/* Temporary definitions which will become obsolete with Notebook release 5.0 */
.ansi-black-fg { color: #3E424D; }
.ansi-black-bg { background-color: #3E424D; }
.ansi-black-intense-fg { color: #282C36; }
.ansi-black-intense-bg { background-color: #282C36; }
.ansi-red-fg { color: #E75C58; }
.ansi-red-bg { background-color: #E75C58; }
.ansi-red-intense-fg { color: #B22B31; }
.ansi-red-intense-bg { background-color: #B22B31; }
.ansi-green-fg { color: #00A250; }
.ansi-green-bg { background-color: #00A250; }
.ansi-green-intense-fg { color: #007427; }
.ansi-green-intense-bg { background-color: #007427; }
.ansi-yellow-fg { color: #DDB62B; }
.ansi-yellow-bg { background-color: #DDB62B; }
.ansi-yellow-intense-fg { color: #B27D12; }
.ansi-yellow-intense-bg { background-color: #B27D12; }
.ansi-blue-fg { color: #208FFB; }
.ansi-blue-bg { background-color: #208FFB; }
.ansi-blue-intense-fg { color: #0065CA; }
.ansi-blue-intense-bg { background-color: #0065CA; }
.ansi-magenta-fg { color: #D160C4; }
.ansi-magenta-bg { background-color: #D160C4; }
.ansi-magenta-intense-fg { color: #A03196; }
.ansi-magenta-intense-bg { background-color: #A03196; }
.ansi-cyan-fg { color: #60C6C8; }
.ansi-cyan-bg { background-color: #60C6C8; }
.ansi-cyan-intense-fg { color: #258F8F; }
.ansi-cyan-intense-bg { background-color: #258F8F; }
.ansi-white-fg { color: #C5C1B4; }
.ansi-white-bg { background-color: #C5C1B4; }
.ansi-white-intense-fg { color: #A1A6B2; }
.ansi-white-intense-bg { background-color: #A1A6B2; }

.ansi-bold { font-weight: bold; }

    </style>


<style type="text/css">
/* Overrides of notebook CSS for static HTML export */
body {
  overflow: visible;
  padding: 8px;
}

div#notebook {
  overflow: visible;
  border-top: none;
}@media print {
  div.cell {
    display: block;
    page-break-inside: avoid;
  } 
  div.output_wrapper { 
    display: block;
    page-break-inside: avoid; 
  }
  div.output { 
    display: block;
    page-break-inside: avoid; 
  }
}
</style>

<!-- Custom stylesheet, it must be in the same directory as the html file -->
<link rel="stylesheet" href="custom.css">

<!-- Loading mathjax macro -->
<!-- Load mathjax -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS_HTML"></script>
    <!-- MathJax configuration -->
    <script type="text/x-mathjax-config">
    MathJax.Hub.Config({
        tex2jax: {
            inlineMath: [ ['$','$'], ["\\(","\\)"] ],
            displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
            processEscapes: true,
            processEnvironments: true
        },
        // Center justify equations in code and markdown cells. Elsewhere
        // we use CSS to left justify single line equations in code cells.
        displayAlign: 'center',
        "HTML-CSS": {
            styles: {'.MathJax_Display': {"margin": 0}},
            linebreaks: { automatic: true }
        }
    });
    </script>
    <!-- End of mathjax configuration --></head>
<body>
  <div tabindex="-1" id="notebook" class="border-box-sizing">
    <div class="container" id="notebook-container">

<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[124]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">path</span><span class="o">=</span><span class="sa">r</span><span class="s1">&#39;rankingcard.csv&#39;</span>
<span class="n">data</span><span class="o">=</span><span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">path</span><span class="p">,</span><span class="n">index_col</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
<span class="n">data</span><span class="o">.</span><span class="n">head</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[124]:</div>



<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>SeriousDlqin2yrs</th>
      <th>RevolvingUtilizationOfUnsecuredLines</th>
      <th>age</th>
      <th>NumberOfTime30-59DaysPastDueNotWorse</th>
      <th>DebtRatio</th>
      <th>MonthlyIncome</th>
      <th>NumberOfOpenCreditLinesAndLoans</th>
      <th>NumberOfTimes90DaysLate</th>
      <th>NumberRealEstateLoansOrLines</th>
      <th>NumberOfTime60-89DaysPastDueNotWorse</th>
      <th>NumberOfDependents</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>1</th>
      <td>1</td>
      <td>0.766127</td>
      <td>45</td>
      <td>2</td>
      <td>0.802982</td>
      <td>9120.0</td>
      <td>13</td>
      <td>0</td>
      <td>6</td>
      <td>0</td>
      <td>2.0</td>
    </tr>
    <tr>
      <th>2</th>
      <td>0</td>
      <td>0.957151</td>
      <td>40</td>
      <td>0</td>
      <td>0.121876</td>
      <td>2600.0</td>
      <td>4</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>1.0</td>
    </tr>
    <tr>
      <th>3</th>
      <td>0</td>
      <td>0.658180</td>
      <td>38</td>
      <td>1</td>
      <td>0.085113</td>
      <td>3042.0</td>
      <td>2</td>
      <td>1</td>
      <td>0</td>
      <td>0</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>4</th>
      <td>0</td>
      <td>0.233810</td>
      <td>30</td>
      <td>0</td>
      <td>0.036050</td>
      <td>3300.0</td>
      <td>5</td>
      <td>0</td>
      <td>0</td>
      <td>0</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>5</th>
      <td>0</td>
      <td>0.907239</td>
      <td>49</td>
      <td>1</td>
      <td>0.024926</td>
      <td>63588.0</td>
      <td>7</td>
      <td>0</td>
      <td>1</td>
      <td>0</td>
      <td>0.0</td>
    </tr>
  </tbody>
</table>
</div>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[45]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">data</span><span class="o">.</span><span class="n">info</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>&lt;class &#39;pandas.core.frame.DataFrame&#39;&gt;
Int64Index: 150000 entries, 1 to 150000
Data columns (total 11 columns):
SeriousDlqin2yrs                        150000 non-null int64
RevolvingUtilizationOfUnsecuredLines    150000 non-null float64
age                                     150000 non-null int64
NumberOfTime30-59DaysPastDueNotWorse    150000 non-null int64
DebtRatio                               150000 non-null float64
MonthlyIncome                           120269 non-null float64
NumberOfOpenCreditLinesAndLoans         150000 non-null int64
NumberOfTimes90DaysLate                 150000 non-null int64
NumberRealEstateLoansOrLines            150000 non-null int64
NumberOfTime60-89DaysPastDueNotWorse    150000 non-null int64
NumberOfDependents                      146076 non-null float64
dtypes: float64(4), int64(7)
memory usage: 13.7 MB
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[125]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#去除重复值</span>
<span class="n">data</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">(</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">data</span><span class="o">.</span><span class="n">info</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>&lt;class &#39;pandas.core.frame.DataFrame&#39;&gt;
Int64Index: 149391 entries, 1 to 150000
Data columns (total 11 columns):
SeriousDlqin2yrs                        149391 non-null int64
RevolvingUtilizationOfUnsecuredLines    149391 non-null float64
age                                     149391 non-null int64
NumberOfTime30-59DaysPastDueNotWorse    149391 non-null int64
DebtRatio                               149391 non-null float64
MonthlyIncome                           120170 non-null float64
NumberOfOpenCreditLinesAndLoans         149391 non-null int64
NumberOfTimes90DaysLate                 149391 non-null int64
NumberRealEstateLoansOrLines            149391 non-null int64
NumberOfTime60-89DaysPastDueNotWorse    149391 non-null int64
NumberOfDependents                      145563 non-null float64
dtypes: float64(4), int64(7)
memory usage: 13.7 MB
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[126]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">data</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[126]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>149391</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[127]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#删除之后千万不要忘记，恢复索引</span>
<span class="n">data</span><span class="o">.</span><span class="n">index</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">data</span><span class="o">.</span><span class="n">info</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>&lt;class &#39;pandas.core.frame.DataFrame&#39;&gt;
RangeIndex: 149391 entries, 0 to 149390
Data columns (total 11 columns):
SeriousDlqin2yrs                        149391 non-null int64
RevolvingUtilizationOfUnsecuredLines    149391 non-null float64
age                                     149391 non-null int64
NumberOfTime30-59DaysPastDueNotWorse    149391 non-null int64
DebtRatio                               149391 non-null float64
MonthlyIncome                           120170 non-null float64
NumberOfOpenCreditLinesAndLoans         149391 non-null int64
NumberOfTimes90DaysLate                 149391 non-null int64
NumberRealEstateLoansOrLines            149391 non-null int64
NumberOfTime60-89DaysPastDueNotWorse    149391 non-null int64
NumberOfDependents                      145563 non-null float64
dtypes: float64(4), int64(7)
memory usage: 12.5 MB
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[128]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">data</span><span class="o">.</span><span class="n">index</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[128]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>RangeIndex(start=0, stop=149391, step=1)</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="&#22635;&#34917;&#32570;&#22833;&#20540;">&#22635;&#34917;&#32570;&#22833;&#20540;<a class="anchor-link" href="#&#22635;&#34917;&#32570;&#22833;&#20540;">&#182;</a></h1>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[129]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">data</span><span class="o">.</span><span class="n">isnull</span><span class="p">()</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span><span class="o">/</span><span class="n">data</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[129]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>SeriousDlqin2yrs                        0.000000
RevolvingUtilizationOfUnsecuredLines    0.000000
age                                     0.000000
NumberOfTime30-59DaysPastDueNotWorse    0.000000
DebtRatio                               0.000000
MonthlyIncome                           0.195601
NumberOfOpenCreditLinesAndLoans         0.000000
NumberOfTimes90DaysLate                 0.000000
NumberRealEstateLoansOrLines            0.000000
NumberOfTime60-89DaysPastDueNotWorse    0.000000
NumberOfDependents                      0.025624
dtype: float64</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[130]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">data</span><span class="o">.</span><span class="n">isnull</span><span class="p">()</span><span class="o">.</span><span class="n">mean</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[130]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>SeriousDlqin2yrs                        0.000000
RevolvingUtilizationOfUnsecuredLines    0.000000
age                                     0.000000
NumberOfTime30-59DaysPastDueNotWorse    0.000000
DebtRatio                               0.000000
MonthlyIncome                           0.195601
NumberOfOpenCreditLinesAndLoans         0.000000
NumberOfTimes90DaysLate                 0.000000
NumberRealEstateLoansOrLines            0.000000
NumberOfTime60-89DaysPastDueNotWorse    0.000000
NumberOfDependents                      0.025624
dtype: float64</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="&#20351;&#29992;&#22343;&#20540;&#22635;&#34917;&#8220;&#23478;&#23646;&#20154;&#25968;&#8221;">&#20351;&#29992;&#22343;&#20540;&#22635;&#34917;&#8220;&#23478;&#23646;&#20154;&#25968;&#8221;<a class="anchor-link" href="#&#20351;&#29992;&#22343;&#20540;&#22635;&#34917;&#8220;&#23478;&#23646;&#20154;&#25968;&#8221;">&#182;</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">data</span><span class="p">[</span><span class="s2">&quot;NumberOfDependents&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">fillna</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="s2">&quot;NumberOfDependents&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">mean</span><span class="p">()),</span><span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="&#38543;&#26426;&#26862;&#26519;&#22635;&#34917;&#25910;&#20837;">&#38543;&#26426;&#26862;&#26519;&#22635;&#34917;&#25910;&#20837;<a class="anchor-link" href="#&#38543;&#26426;&#26862;&#26519;&#22635;&#34917;&#25910;&#20837;">&#182;</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">fill_missing_rf</span><span class="p">(</span><span class="n">X</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">to_fill</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    使用随机森林填补一个特征的缺失值的函数</span>
<span class="sd">    参数：</span>
<span class="sd">    X：要填补的特征矩阵</span>
<span class="sd">    y：完整的，没有缺失值的标签</span>
<span class="sd">    to_fill：字符串，要填补的那一列的名称</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="c1">#构建我们的新特征矩阵和新标签</span>
    <span class="n">df</span> <span class="o">=</span> <span class="n">X</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
    <span class="n">fill</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">loc</span><span class="p">[:,</span><span class="n">to_fill</span><span class="p">]</span>
    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">df</span><span class="o">.</span><span class="n">loc</span><span class="p">[:,</span><span class="n">df</span><span class="o">.</span><span class="n">columns</span> <span class="o">!=</span> <span class="n">to_fill</span><span class="p">],</span><span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">y</span><span class="p">)],</span><span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
    <span class="c1">#找出我们的训练集和测试集</span>
    <span class="n">Ytrain</span> <span class="o">=</span> <span class="n">fill</span><span class="p">[</span><span class="n">fill</span><span class="o">.</span><span class="n">notnull</span><span class="p">()]</span>
    <span class="n">Ytest</span> <span class="o">=</span> <span class="n">fill</span><span class="p">[</span><span class="n">fill</span><span class="o">.</span><span class="n">isnull</span><span class="p">()]</span>
    <span class="n">Xtrain</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">iloc</span><span class="p">[</span><span class="n">Ytrain</span><span class="o">.</span><span class="n">index</span><span class="p">,:]</span>
    <span class="n">Xtest</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">iloc</span><span class="p">[</span><span class="n">Ytest</span><span class="o">.</span><span class="n">index</span><span class="p">,:]</span>
    <span class="c1">#用随机森林回归来填补缺失值</span>
    <span class="kn">from</span> <span class="nn">sklearn.ensemble</span> <span class="k">import</span> <span class="n">RandomForestRegressor</span> <span class="k">as</span> <span class="n">rfr</span>
    <span class="n">rfr</span> <span class="o">=</span> <span class="n">rfr</span><span class="p">(</span><span class="n">n_estimators</span><span class="o">=</span><span class="mi">100</span><span class="p">)</span>
    <span class="n">rfr</span> <span class="o">=</span> <span class="n">rfr</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">Xtrain</span><span class="p">,</span> <span class="n">Ytrain</span><span class="p">)</span>
    <span class="n">Ypredict</span> <span class="o">=</span> <span class="n">rfr</span><span class="o">.</span><span class="n">predict</span><span class="p">(</span><span class="n">Xtest</span><span class="p">)</span>
    <span class="k">return</span> <span class="n">Ypredict</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[133]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">X</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">iloc</span><span class="p">[:,</span><span class="mi">1</span><span class="p">:]</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;SeriousDlqin2yrs&quot;</span><span class="p">]</span>
<span class="n">X</span><span class="o">.</span><span class="n">shape</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[133]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>(149391, 10)</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#=====【TIME WARNING：1 min】=====#</span>
<span class="n">y_pred</span> <span class="o">=</span> <span class="n">fill_missing_rf</span><span class="p">(</span><span class="n">X</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="s2">&quot;MonthlyIncome&quot;</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#确认我们的结果合理之后，我们就可以将数据覆盖了</span>
<span class="n">data</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="n">data</span><span class="o">.</span><span class="n">loc</span><span class="p">[:,</span><span class="s2">&quot;MonthlyIncome&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">isnull</span><span class="p">(),</span><span class="s2">&quot;MonthlyIncome&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">y_pred</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[135]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">data</span><span class="o">.</span><span class="n">info</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>&lt;class &#39;pandas.core.frame.DataFrame&#39;&gt;
RangeIndex: 149391 entries, 0 to 149390
Data columns (total 11 columns):
SeriousDlqin2yrs                        149391 non-null int64
RevolvingUtilizationOfUnsecuredLines    149391 non-null float64
age                                     149391 non-null int64
NumberOfTime30-59DaysPastDueNotWorse    149391 non-null int64
DebtRatio                               149391 non-null float64
MonthlyIncome                           149391 non-null float64
NumberOfOpenCreditLinesAndLoans         149391 non-null int64
NumberOfTimes90DaysLate                 149391 non-null int64
NumberRealEstateLoansOrLines            149391 non-null int64
NumberOfTime60-89DaysPastDueNotWorse    149391 non-null int64
NumberOfDependents                      149391 non-null float64
dtypes: float64(4), int64(7)
memory usage: 12.5 MB
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="&#24322;&#24120;&#20540;">&#24322;&#24120;&#20540;<a class="anchor-link" href="#&#24322;&#24120;&#20540;">&#182;</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[136]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#描述性统计</span>
<span class="n">data</span><span class="o">.</span><span class="n">describe</span><span class="p">([</span><span class="mf">0.01</span><span class="p">,</span><span class="mf">0.1</span><span class="p">,</span><span class="mf">0.25</span><span class="p">,</span><span class="o">.</span><span class="mi">5</span><span class="p">,</span><span class="o">.</span><span class="mi">75</span><span class="p">,</span><span class="o">.</span><span class="mi">9</span><span class="p">,</span><span class="o">.</span><span class="mi">99</span><span class="p">])</span><span class="o">.</span><span class="n">T</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[136]:</div>



<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>count</th>
      <th>mean</th>
      <th>std</th>
      <th>min</th>
      <th>1%</th>
      <th>10%</th>
      <th>25%</th>
      <th>50%</th>
      <th>75%</th>
      <th>90%</th>
      <th>99%</th>
      <th>max</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>SeriousDlqin2yrs</th>
      <td>149391.0</td>
      <td>0.066999</td>
      <td>0.250021</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.000000</td>
      <td>0.000000</td>
      <td>0.000000</td>
      <td>0.000000</td>
      <td>0.000000</td>
      <td>1.000000</td>
      <td>1.0</td>
    </tr>
    <tr>
      <th>RevolvingUtilizationOfUnsecuredLines</th>
      <td>149391.0</td>
      <td>6.071087</td>
      <td>250.263672</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.003199</td>
      <td>0.030132</td>
      <td>0.154235</td>
      <td>0.556494</td>
      <td>0.978007</td>
      <td>1.093922</td>
      <td>50708.0</td>
    </tr>
    <tr>
      <th>age</th>
      <td>149391.0</td>
      <td>52.306237</td>
      <td>14.725962</td>
      <td>0.0</td>
      <td>24.0</td>
      <td>33.000000</td>
      <td>41.000000</td>
      <td>52.000000</td>
      <td>63.000000</td>
      <td>72.000000</td>
      <td>87.000000</td>
      <td>109.0</td>
    </tr>
    <tr>
      <th>NumberOfTime30-59DaysPastDueNotWorse</th>
      <td>149391.0</td>
      <td>0.393886</td>
      <td>3.852953</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.000000</td>
      <td>0.000000</td>
      <td>0.000000</td>
      <td>0.000000</td>
      <td>1.000000</td>
      <td>4.000000</td>
      <td>98.0</td>
    </tr>
    <tr>
      <th>DebtRatio</th>
      <td>149391.0</td>
      <td>354.436740</td>
      <td>2041.843455</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.034991</td>
      <td>0.177441</td>
      <td>0.368234</td>
      <td>0.875279</td>
      <td>1275.000000</td>
      <td>4985.100000</td>
      <td>329664.0</td>
    </tr>
    <tr>
      <th>MonthlyIncome</th>
      <td>149391.0</td>
      <td>5424.665952</td>
      <td>13236.156261</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.170000</td>
      <td>1800.000000</td>
      <td>4420.000000</td>
      <td>7416.000000</td>
      <td>10800.000000</td>
      <td>23256.100000</td>
      <td>3008750.0</td>
    </tr>
    <tr>
      <th>NumberOfOpenCreditLinesAndLoans</th>
      <td>149391.0</td>
      <td>8.480892</td>
      <td>5.136515</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>3.000000</td>
      <td>5.000000</td>
      <td>8.000000</td>
      <td>11.000000</td>
      <td>15.000000</td>
      <td>24.000000</td>
      <td>58.0</td>
    </tr>
    <tr>
      <th>NumberOfTimes90DaysLate</th>
      <td>149391.0</td>
      <td>0.238120</td>
      <td>3.826165</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.000000</td>
      <td>0.000000</td>
      <td>0.000000</td>
      <td>0.000000</td>
      <td>0.000000</td>
      <td>3.000000</td>
      <td>98.0</td>
    </tr>
    <tr>
      <th>NumberRealEstateLoansOrLines</th>
      <td>149391.0</td>
      <td>1.022391</td>
      <td>1.130196</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.000000</td>
      <td>0.000000</td>
      <td>1.000000</td>
      <td>2.000000</td>
      <td>2.000000</td>
      <td>4.000000</td>
      <td>54.0</td>
    </tr>
    <tr>
      <th>NumberOfTime60-89DaysPastDueNotWorse</th>
      <td>149391.0</td>
      <td>0.212503</td>
      <td>3.810523</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.000000</td>
      <td>0.000000</td>
      <td>0.000000</td>
      <td>0.000000</td>
      <td>0.000000</td>
      <td>2.000000</td>
      <td>98.0</td>
    </tr>
    <tr>
      <th>NumberOfDependents</th>
      <td>149391.0</td>
      <td>0.740393</td>
      <td>1.108272</td>
      <td>0.0</td>
      <td>0.0</td>
      <td>0.000000</td>
      <td>0.000000</td>
      <td>0.000000</td>
      <td>1.000000</td>
      <td>2.000000</td>
      <td>4.000000</td>
      <td>20.0</td>
    </tr>
  </tbody>
</table>
</div>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[137]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#异常值也被我们观察到，年龄的最小值居然有0，这不符合银行的业务需求，即便是儿童账户也要至少8岁，我们可以</span>
<span class="c1">#查看一下年龄为0的人有多少</span>
<span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="s2">&quot;age&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[137]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>1</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#发现只有一个人年龄为0，可以判断这肯定是录入失误造成的，可以当成是缺失值来处理，直接删除掉这个样本</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="n">data</span><span class="p">[</span><span class="s2">&quot;age&quot;</span><span class="p">]</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">]</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">另外，有三个指标看起来很奇怪：</span>
<span class="sd">&quot;NumberOfTime30-59DaysPastDueNotWorse&quot;</span>
<span class="sd">&quot;NumberOfTime60-89DaysPastDueNotWorse&quot;</span>
<span class="sd">&quot;NumberOfTimes90DaysLate&quot;</span>
<span class="sd">这三个指标分别是“过去两年内出现35-59天逾期但是没有发展的更坏的次数”，“过去两年内出现60-89天逾期但是没</span>
<span class="sd">有发展的更坏的次数”,“过去两年内出现90天逾期的次数”。这三个指标，在99%的分布的时候依然是2，最大值却是</span>
<span class="sd">98，看起来非常奇怪。一个人在过去两年内逾期35~59天98次，一年6个60天，两年内逾期98次这是怎么算出来的？</span>
<span class="sd">我们可以去咨询业务人员，请教他们这个逾期次数是如何计算的。如果这个指标是正常的，那这些两年内逾期了98次的</span>
<span class="sd">客户，应该都是坏客户。在我们无法询问他们情况下，我们查看一下有多少个样本存在这种异常：</span>
<span class="sd">&quot;&quot;&quot;</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[139]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">data</span><span class="p">[</span><span class="n">data</span><span class="o">.</span><span class="n">loc</span><span class="p">[:,</span><span class="s2">&quot;NumberOfTimes90DaysLate&quot;</span><span class="p">]</span> <span class="o">&gt;</span> <span class="mi">90</span><span class="p">]</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[139]:</div>



<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>SeriousDlqin2yrs</th>
      <th>RevolvingUtilizationOfUnsecuredLines</th>
      <th>age</th>
      <th>NumberOfTime30-59DaysPastDueNotWorse</th>
      <th>DebtRatio</th>
      <th>MonthlyIncome</th>
      <th>NumberOfOpenCreditLinesAndLoans</th>
      <th>NumberOfTimes90DaysLate</th>
      <th>NumberRealEstateLoansOrLines</th>
      <th>NumberOfTime60-89DaysPastDueNotWorse</th>
      <th>NumberOfDependents</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>1732</th>
      <td>1</td>
      <td>1.0</td>
      <td>27</td>
      <td>98</td>
      <td>0.000000</td>
      <td>2700.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>2285</th>
      <td>0</td>
      <td>1.0</td>
      <td>22</td>
      <td>98</td>
      <td>0.000000</td>
      <td>1291.750349</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>3883</th>
      <td>0</td>
      <td>1.0</td>
      <td>38</td>
      <td>98</td>
      <td>12.000000</td>
      <td>2562.720000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>4416</th>
      <td>0</td>
      <td>1.0</td>
      <td>21</td>
      <td>98</td>
      <td>0.000000</td>
      <td>0.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>4704</th>
      <td>0</td>
      <td>1.0</td>
      <td>21</td>
      <td>98</td>
      <td>0.000000</td>
      <td>2000.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>5072</th>
      <td>0</td>
      <td>1.0</td>
      <td>33</td>
      <td>98</td>
      <td>0.000000</td>
      <td>1500.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>6279</th>
      <td>1</td>
      <td>1.0</td>
      <td>51</td>
      <td>98</td>
      <td>0.000000</td>
      <td>7500.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>7031</th>
      <td>1</td>
      <td>1.0</td>
      <td>29</td>
      <td>98</td>
      <td>0.000000</td>
      <td>1647.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>7116</th>
      <td>1</td>
      <td>1.0</td>
      <td>25</td>
      <td>98</td>
      <td>21.000000</td>
      <td>4593.690000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>7686</th>
      <td>1</td>
      <td>1.0</td>
      <td>21</td>
      <td>98</td>
      <td>0.000000</td>
      <td>2107.137522</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>8170</th>
      <td>1</td>
      <td>1.0</td>
      <td>23</td>
      <td>98</td>
      <td>0.006922</td>
      <td>2166.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>9274</th>
      <td>0</td>
      <td>1.0</td>
      <td>24</td>
      <td>98</td>
      <td>0.000000</td>
      <td>1488.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>9644</th>
      <td>1</td>
      <td>1.0</td>
      <td>53</td>
      <td>98</td>
      <td>0.000000</td>
      <td>1900.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>9681</th>
      <td>0</td>
      <td>1.0</td>
      <td>28</td>
      <td>98</td>
      <td>0.000000</td>
      <td>1400.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>10197</th>
      <td>0</td>
      <td>1.0</td>
      <td>23</td>
      <td>98</td>
      <td>0.000000</td>
      <td>1.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>10241</th>
      <td>1</td>
      <td>1.0</td>
      <td>28</td>
      <td>98</td>
      <td>0.000000</td>
      <td>1700.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>11156</th>
      <td>1</td>
      <td>1.0</td>
      <td>26</td>
      <td>98</td>
      <td>0.000000</td>
      <td>1417.108333</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>11357</th>
      <td>1</td>
      <td>1.0</td>
      <td>27</td>
      <td>98</td>
      <td>0.000000</td>
      <td>3737.967500</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>12016</th>
      <td>0</td>
      <td>1.0</td>
      <td>28</td>
      <td>98</td>
      <td>0.000000</td>
      <td>2171.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>12126</th>
      <td>1</td>
      <td>1.0</td>
      <td>50</td>
      <td>98</td>
      <td>0.000000</td>
      <td>1350.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>12364</th>
      <td>1</td>
      <td>1.0</td>
      <td>25</td>
      <td>98</td>
      <td>0.000000</td>
      <td>640.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>13196</th>
      <td>0</td>
      <td>1.0</td>
      <td>40</td>
      <td>98</td>
      <td>0.000000</td>
      <td>7218.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>2.0</td>
    </tr>
    <tr>
      <th>14781</th>
      <td>1</td>
      <td>1.0</td>
      <td>23</td>
      <td>98</td>
      <td>0.000000</td>
      <td>1698.365655</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>14892</th>
      <td>1</td>
      <td>1.0</td>
      <td>56</td>
      <td>98</td>
      <td>0.000000</td>
      <td>2561.390000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>16652</th>
      <td>1</td>
      <td>1.0</td>
      <td>54</td>
      <td>98</td>
      <td>0.000000</td>
      <td>2111.283333</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>17968</th>
      <td>0</td>
      <td>1.0</td>
      <td>35</td>
      <td>98</td>
      <td>0.000000</td>
      <td>1700.000000</td>
      <td>1</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>1.0</td>
    </tr>
    <tr>
      <th>18470</th>
      <td>0</td>
      <td>1.0</td>
      <td>26</td>
      <td>98</td>
      <td>0.000000</td>
      <td>2305.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>18513</th>
      <td>0</td>
      <td>1.0</td>
      <td>21</td>
      <td>98</td>
      <td>0.000000</td>
      <td>1163.165636</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>18691</th>
      <td>0</td>
      <td>1.0</td>
      <td>21</td>
      <td>98</td>
      <td>0.000000</td>
      <td>1163.165636</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>18704</th>
      <td>0</td>
      <td>1.0</td>
      <td>46</td>
      <td>98</td>
      <td>0.000000</td>
      <td>1879.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>1.0</td>
    </tr>
    <tr>
      <th>...</th>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
    </tr>
    <tr>
      <th>127123</th>
      <td>1</td>
      <td>1.0</td>
      <td>25</td>
      <td>98</td>
      <td>0.000000</td>
      <td>3360.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>127724</th>
      <td>1</td>
      <td>1.0</td>
      <td>54</td>
      <td>98</td>
      <td>0.012994</td>
      <td>2000.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>128149</th>
      <td>1</td>
      <td>1.0</td>
      <td>54</td>
      <td>98</td>
      <td>0.000000</td>
      <td>2111.283333</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>129213</th>
      <td>1</td>
      <td>1.0</td>
      <td>30</td>
      <td>98</td>
      <td>0.024979</td>
      <td>1200.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>129382</th>
      <td>1</td>
      <td>1.0</td>
      <td>29</td>
      <td>98</td>
      <td>36.000000</td>
      <td>6661.080000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>129928</th>
      <td>1</td>
      <td>1.0</td>
      <td>52</td>
      <td>98</td>
      <td>89.000000</td>
      <td>396.510000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>131400</th>
      <td>0</td>
      <td>1.0</td>
      <td>39</td>
      <td>98</td>
      <td>0.000000</td>
      <td>3437.787333</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>132525</th>
      <td>0</td>
      <td>1.0</td>
      <td>39</td>
      <td>98</td>
      <td>0.000000</td>
      <td>2541.640000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>1.0</td>
    </tr>
    <tr>
      <th>133734</th>
      <td>0</td>
      <td>1.0</td>
      <td>21</td>
      <td>98</td>
      <td>0.000000</td>
      <td>867.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>134082</th>
      <td>1</td>
      <td>1.0</td>
      <td>33</td>
      <td>98</td>
      <td>0.000000</td>
      <td>4100.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>1.0</td>
    </tr>
    <tr>
      <th>136023</th>
      <td>1</td>
      <td>1.0</td>
      <td>54</td>
      <td>98</td>
      <td>0.059411</td>
      <td>1800.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>136160</th>
      <td>1</td>
      <td>1.0</td>
      <td>34</td>
      <td>98</td>
      <td>0.000000</td>
      <td>3144.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>2.0</td>
    </tr>
    <tr>
      <th>136190</th>
      <td>1</td>
      <td>1.0</td>
      <td>33</td>
      <td>98</td>
      <td>0.000000</td>
      <td>2600.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>4.0</td>
    </tr>
    <tr>
      <th>137539</th>
      <td>1</td>
      <td>1.0</td>
      <td>40</td>
      <td>98</td>
      <td>49.000000</td>
      <td>356.110000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>138663</th>
      <td>0</td>
      <td>1.0</td>
      <td>33</td>
      <td>98</td>
      <td>0.008055</td>
      <td>3475.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>2.0</td>
    </tr>
    <tr>
      <th>140520</th>
      <td>0</td>
      <td>1.0</td>
      <td>24</td>
      <td>98</td>
      <td>0.000000</td>
      <td>750.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>140847</th>
      <td>0</td>
      <td>1.0</td>
      <td>22</td>
      <td>98</td>
      <td>0.000000</td>
      <td>4500.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>140959</th>
      <td>1</td>
      <td>1.0</td>
      <td>27</td>
      <td>98</td>
      <td>0.000000</td>
      <td>7840.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>141333</th>
      <td>1</td>
      <td>1.0</td>
      <td>40</td>
      <td>98</td>
      <td>0.010939</td>
      <td>3290.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>3.0</td>
    </tr>
    <tr>
      <th>141571</th>
      <td>0</td>
      <td>1.0</td>
      <td>23</td>
      <td>98</td>
      <td>0.000000</td>
      <td>3553.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>143147</th>
      <td>0</td>
      <td>1.0</td>
      <td>33</td>
      <td>98</td>
      <td>0.000000</td>
      <td>2534.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>143654</th>
      <td>1</td>
      <td>1.0</td>
      <td>31</td>
      <td>98</td>
      <td>0.000000</td>
      <td>2200.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>3.0</td>
    </tr>
    <tr>
      <th>144010</th>
      <td>1</td>
      <td>1.0</td>
      <td>60</td>
      <td>98</td>
      <td>0.000000</td>
      <td>1375.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>145669</th>
      <td>1</td>
      <td>1.0</td>
      <td>28</td>
      <td>98</td>
      <td>0.000000</td>
      <td>1664.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>146538</th>
      <td>1</td>
      <td>1.0</td>
      <td>37</td>
      <td>98</td>
      <td>0.007578</td>
      <td>3166.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>146667</th>
      <td>1</td>
      <td>1.0</td>
      <td>25</td>
      <td>98</td>
      <td>0.000000</td>
      <td>2022.348905</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>147180</th>
      <td>1</td>
      <td>1.0</td>
      <td>68</td>
      <td>98</td>
      <td>255.000000</td>
      <td>127.210000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>148548</th>
      <td>1</td>
      <td>1.0</td>
      <td>24</td>
      <td>98</td>
      <td>54.000000</td>
      <td>315.130000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>148634</th>
      <td>0</td>
      <td>1.0</td>
      <td>26</td>
      <td>98</td>
      <td>0.000000</td>
      <td>2000.000000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
    <tr>
      <th>148833</th>
      <td>1</td>
      <td>1.0</td>
      <td>34</td>
      <td>98</td>
      <td>9.000000</td>
      <td>2523.890000</td>
      <td>0</td>
      <td>98</td>
      <td>0</td>
      <td>98</td>
      <td>0.0</td>
    </tr>
  </tbody>
</table>
<p>225 rows × 11 columns</p>
</div>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[140]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">data</span><span class="o">.</span><span class="n">loc</span><span class="p">[:,</span><span class="s2">&quot;NumberOfTimes90DaysLate&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">value_counts</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[140]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>0     141107
1       5232
2       1555
3        667
4        291
98       220
5        131
6         80
7         38
8         21
9         19
10         8
11         5
96         5
13         4
12         2
14         2
15         2
17         1
Name: NumberOfTimes90DaysLate, dtype: int64</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[141]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">data</span><span class="p">[</span><span class="n">data</span><span class="o">.</span><span class="n">loc</span><span class="p">[:,</span><span class="s2">&quot;NumberOfTimes90DaysLate&quot;</span><span class="p">]</span> <span class="o">&gt;</span> <span class="mi">90</span><span class="p">]</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
<span class="c1">#有225个样本存在这样的情况，并且这些样本，我们观察一下，标签并不都是1，他们并不都是坏客户。因此，我们基</span>
<span class="c1">#本可以判断，这些样本是某种异常，应该把它们删除</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[141]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>SeriousDlqin2yrs                        225
RevolvingUtilizationOfUnsecuredLines    225
age                                     225
NumberOfTime30-59DaysPastDueNotWorse    225
DebtRatio                               225
MonthlyIncome                           225
NumberOfOpenCreditLinesAndLoans         225
NumberOfTimes90DaysLate                 225
NumberRealEstateLoansOrLines            225
NumberOfTime60-89DaysPastDueNotWorse    225
NumberOfDependents                      225
dtype: int64</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[142]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">data</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="n">data</span><span class="o">.</span><span class="n">loc</span><span class="p">[:,</span><span class="s2">&quot;NumberOfTimes90DaysLate&quot;</span><span class="p">]</span> <span class="o">&lt;</span> <span class="mi">90</span><span class="p">]</span>
<span class="c1">#恢复索引</span>
<span class="n">data</span><span class="o">.</span><span class="n">index</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">data</span><span class="o">.</span><span class="n">info</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>&lt;class &#39;pandas.core.frame.DataFrame&#39;&gt;
RangeIndex: 149165 entries, 0 to 149164
Data columns (total 11 columns):
SeriousDlqin2yrs                        149165 non-null int64
RevolvingUtilizationOfUnsecuredLines    149165 non-null float64
age                                     149165 non-null int64
NumberOfTime30-59DaysPastDueNotWorse    149165 non-null int64
DebtRatio                               149165 non-null float64
MonthlyIncome                           149165 non-null float64
NumberOfOpenCreditLinesAndLoans         149165 non-null int64
NumberOfTimes90DaysLate                 149165 non-null int64
NumberRealEstateLoansOrLines            149165 non-null int64
NumberOfTime60-89DaysPastDueNotWorse    149165 non-null int64
NumberOfDependents                      149165 non-null float64
dtypes: float64(4), int64(7)
memory usage: 12.5 MB
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="&#26679;&#26412;&#19981;&#22343;&#34913;&#38382;&#39064;">&#26679;&#26412;&#19981;&#22343;&#34913;&#38382;&#39064;<a class="anchor-link" href="#&#26679;&#26412;&#19981;&#22343;&#34913;&#38382;&#39064;">&#182;</a></h1>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[143]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#探索标签的分布</span>
<span class="n">X</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">iloc</span><span class="p">[:,</span><span class="mi">1</span><span class="p">:]</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">iloc</span><span class="p">[:,</span><span class="mi">0</span><span class="p">]</span>
<span class="n">y</span><span class="o">.</span><span class="n">value_counts</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[143]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>0    139292
1      9873
Name: SeriousDlqin2yrs, dtype: int64</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[144]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">n_sample</span> <span class="o">=</span> <span class="n">X</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">n_1_sample</span> <span class="o">=</span> <span class="n">y</span><span class="o">.</span><span class="n">value_counts</span><span class="p">()[</span><span class="mi">1</span><span class="p">]</span>
<span class="n">n_0_sample</span> <span class="o">=</span> <span class="n">y</span><span class="o">.</span><span class="n">value_counts</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;样本个数：</span><span class="si">{}</span><span class="s1">; 1占</span><span class="si">{:.2%}</span><span class="s1">; 0占</span><span class="si">{:.2%}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">n_sample</span><span class="p">,</span><span class="n">n_1_sample</span><span class="o">/</span><span class="n">n_sample</span><span class="p">,</span><span class="n">n_0_sample</span><span class="o">/</span><span class="n">n_sample</span><span class="p">))</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>样本个数：149165; 1占6.62%; 0占93.38%
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">imblearn</span>
<span class="c1">#imblearn是专门用来处理不平衡数据集的库，在处理样本不均衡问题中性能高过sklearn很多</span>
<span class="c1">#imblearn里面也是一个个的类，也需要进行实例化，fit拟合，和sklearn用法相似</span>
<span class="kn">from</span> <span class="nn">imblearn.over_sampling</span> <span class="k">import</span> <span class="n">SMOTE</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[146]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">sm</span> <span class="o">=</span> <span class="n">SMOTE</span><span class="p">(</span><span class="n">random_state</span><span class="o">=</span><span class="mi">42</span><span class="p">)</span> <span class="c1">#实例化</span>
<span class="n">X</span><span class="p">,</span><span class="n">y</span> <span class="o">=</span> <span class="n">sm</span><span class="o">.</span><span class="n">fit_sample</span><span class="p">(</span><span class="n">X</span><span class="p">,</span><span class="n">y</span><span class="p">)</span>
<span class="c1"># 返回上采样后的特征矩阵和标签</span>
<span class="n">n_sample_</span> <span class="o">=</span> <span class="n">X</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">(</span><span class="n">y</span><span class="p">)</span><span class="o">.</span><span class="n">value_counts</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[146]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>1    139292
0    139292
dtype: int64</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[147]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">n_1_sample</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">(</span><span class="n">y</span><span class="p">)</span><span class="o">.</span><span class="n">value_counts</span><span class="p">()[</span><span class="mi">1</span><span class="p">]</span>
<span class="n">n_0_sample</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">(</span><span class="n">y</span><span class="p">)</span><span class="o">.</span><span class="n">value_counts</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">&#39;样本个数：</span><span class="si">{}</span><span class="s1">; 1占</span><span class="si">{:.2%}</span><span class="s1">; 0占</span><span class="si">{:.2%}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">n_sample_</span><span class="p">,</span><span class="n">n_1_sample</span><span class="o">/</span><span class="n">n_sample_</span><span class="p">,</span><span class="n">n_0_sample</span><span class="o">/</span><span class="n">n_sample_</span><span class="p">))</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>样本个数：278584; 1占50.00%; 0占50.00%
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="&#20998;&#35757;&#32451;&#38598;&#21644;&#27979;&#35797;&#38598;">&#20998;&#35757;&#32451;&#38598;&#21644;&#27979;&#35797;&#38598;<a class="anchor-link" href="#&#20998;&#35757;&#32451;&#38598;&#21644;&#27979;&#35797;&#38598;">&#182;</a></h1>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">sklearn.model_selection</span> <span class="k">import</span> <span class="n">train_test_split</span>
<span class="n">X</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">X</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>

<span class="n">X_train</span><span class="p">,</span> <span class="n">X_vali</span><span class="p">,</span> <span class="n">Y_train</span><span class="p">,</span> <span class="n">Y_vali</span> <span class="o">=</span> <span class="n">train_test_split</span><span class="p">(</span><span class="n">X</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">test_size</span><span class="o">=</span><span class="mf">0.3</span><span class="p">,</span><span class="n">random_state</span><span class="o">=</span><span class="mi">420</span><span class="p">)</span>

<span class="n">model_data</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">Y_train</span><span class="p">,</span> <span class="n">X_train</span><span class="p">],</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="n">model_data</span><span class="o">.</span><span class="n">index</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="n">model_data</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>

<span class="n">model_data</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">columns</span>
<span class="n">vali_data</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">Y_vali</span><span class="p">,</span> <span class="n">X_vali</span><span class="p">],</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="n">vali_data</span><span class="o">.</span><span class="n">index</span> <span class="o">=</span> <span class="nb">range</span><span class="p">(</span><span class="n">vali_data</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">vali_data</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">columns</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">model_data</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;model_data.csv&quot;</span><span class="p">)</span>
<span class="n">vali_data</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;vali_data.csv&quot;</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="&#20998;&#31665;">&#20998;&#31665;<a class="anchor-link" href="#&#20998;&#31665;">&#182;</a></h1>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="1-&#31561;&#39057;&#20998;&#31665;">1 &#31561;&#39057;&#20998;&#31665;<a class="anchor-link" href="#1-&#31561;&#39057;&#20998;&#31665;">&#182;</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#按照等频对需要分箱的列进行分箱</span>
<span class="n">model_data</span><span class="p">[</span><span class="s2">&quot;qcut&quot;</span><span class="p">],</span> <span class="n">updown</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">qcut</span><span class="p">(</span><span class="n">model_data</span><span class="p">[</span><span class="s2">&quot;age&quot;</span><span class="p">],</span> <span class="n">retbins</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">q</span><span class="o">=</span><span class="mi">20</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">pd.qcut，基于分位数的分箱函数，本质是将连续型变量离散化</span>
<span class="sd">只能够处理一维数据。返回箱子的上限和下限</span>
<span class="sd">参数q：要分箱的个数</span>
<span class="sd">参数retbins=True来要求同时返回结构为索引为样本索引，元素为分到的箱子的Series</span>
<span class="sd">现在返回两个值：每个样本属于哪个箱子，以及所有箱子的上限和下限</span>
<span class="sd">&quot;&quot;&quot;</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[151]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#在这里让model_data新添加一列叫做“qcut分箱”，这一列其实就是每个样本所对应的箱子</span>
<span class="n">model_data</span><span class="p">[</span><span class="s2">&quot;qcut&quot;</span><span class="p">]</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[151]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>0             (52.0, 54.0]
1             (61.0, 64.0]
2             (39.0, 41.0]
3             (68.0, 74.0]
4             (52.0, 54.0]
5             (41.0, 43.0]
6            (36.68, 39.0]
7           (20.999, 28.0]
8           (28.0, 31.047]
9           (31.047, 34.0]
10            (61.0, 64.0]
11          (31.047, 34.0]
12            (50.0, 52.0]
13           (74.0, 107.0]
14          (31.047, 34.0]
15            (54.0, 56.0]
16           (36.68, 39.0]
17            (61.0, 64.0]
18            (52.0, 54.0]
19            (39.0, 41.0]
20          (20.999, 28.0]
21            (52.0, 54.0]
22           (74.0, 107.0]
23          (45.0, 46.975]
24            (50.0, 52.0]
25            (61.0, 64.0]
26            (61.0, 64.0]
27           (34.0, 36.68]
28            (61.0, 64.0]
29          (28.0, 31.047]
                ...       
194978        (41.0, 43.0]
194979        (61.0, 64.0]
194980      (45.0, 46.975]
194981        (43.0, 45.0]
194982       (34.0, 36.68]
194983        (50.0, 52.0]
194984    (46.975, 48.484]
194985      (20.999, 28.0]
194986        (50.0, 52.0]
194987      (28.0, 31.047]
194988        (61.0, 64.0]
194989      (58.662, 61.0]
194990        (50.0, 52.0]
194991        (52.0, 54.0]
194992      (28.0, 31.047]
194993      (31.047, 34.0]
194994        (61.0, 64.0]
194995      (48.484, 50.0]
194996    (46.975, 48.484]
194997       (74.0, 107.0]
194998      (28.0, 31.047]
194999       (74.0, 107.0]
195000    (46.975, 48.484]
195001        (39.0, 41.0]
195002       (74.0, 107.0]
195003      (31.047, 34.0]
195004      (48.484, 50.0]
195005      (45.0, 46.975]
195006        (61.0, 64.0]
195007        (52.0, 54.0]
Name: qcut, Length: 195008, dtype: category
Categories (20, interval[float64]): [(20.999, 28.0] &lt; (28.0, 31.047] &lt; (31.047, 34.0] &lt; (34.0, 36.68] &lt;
                                     ... &lt; (61.0, 64.0] &lt; (64.0, 68.0] &lt; (68.0, 74.0] &lt;
                                     (74.0, 107.0]]</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[152]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">model_data</span><span class="p">[</span><span class="s2">&quot;qcut&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">value_counts</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[152]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>(36.68, 39.0]       10981
(50.0, 52.0]        10752
(61.0, 64.0]        10726
(31.047, 34.0]      10673
(58.662, 61.0]      10588
(20.999, 28.0]      10218
(43.0, 45.0]        10087
(52.0, 54.0]        10043
(41.0, 43.0]         9820
(48.484, 50.0]       9792
(46.975, 48.484]     9750
(39.0, 41.0]         9550
(74.0, 107.0]        9295
(28.0, 31.047]       9283
(64.0, 68.0]         9268
(54.0, 56.0]         9131
(56.0, 58.662]       9034
(68.0, 74.0]         8875
(34.0, 36.68]        8828
(45.0, 46.975]       8314
Name: qcut, dtype: int64</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[153]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#所有箱子的上限和下限</span>
<span class="n">updown</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[153]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>array([ 21.        ,  28.        ,  31.04665844,  34.        ,
        36.67957525,  39.        ,  41.        ,  43.        ,
        45.        ,  46.97539708,  48.48418747,  50.        ,
        52.        ,  54.        ,  56.        ,  58.66193043,
        61.        ,  64.        ,  68.        ,  74.        ,
       107.        ])</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[154]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">model_data</span><span class="p">[</span><span class="n">model_data</span><span class="p">[</span><span class="s2">&quot;SeriousDlqin2yrs&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="s2">&quot;qcut&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[154]:</div>



<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>SeriousDlqin2yrs</th>
      <th>RevolvingUtilizationOfUnsecuredLines</th>
      <th>age</th>
      <th>NumberOfTime30-59DaysPastDueNotWorse</th>
      <th>DebtRatio</th>
      <th>MonthlyIncome</th>
      <th>NumberOfOpenCreditLinesAndLoans</th>
      <th>NumberOfTimes90DaysLate</th>
      <th>NumberRealEstateLoansOrLines</th>
      <th>NumberOfTime60-89DaysPastDueNotWorse</th>
      <th>NumberOfDependents</th>
    </tr>
    <tr>
      <th>qcut</th>
      <th></th>
      <th></th>
      <th></th>
      <th></th>
      <th></th>
      <th></th>
      <th></th>
      <th></th>
      <th></th>
      <th></th>
      <th></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>(20.999, 28.0]</th>
      <td>4243</td>
      <td>4243</td>
      <td>4243</td>
      <td>4243</td>
      <td>4243</td>
      <td>4243</td>
      <td>4243</td>
      <td>4243</td>
      <td>4243</td>
      <td>4243</td>
      <td>4243</td>
    </tr>
    <tr>
      <th>(28.0, 31.047]</th>
      <td>3571</td>
      <td>3571</td>
      <td>3571</td>
      <td>3571</td>
      <td>3571</td>
      <td>3571</td>
      <td>3571</td>
      <td>3571</td>
      <td>3571</td>
      <td>3571</td>
      <td>3571</td>
    </tr>
    <tr>
      <th>(31.047, 34.0]</th>
      <td>4075</td>
      <td>4075</td>
      <td>4075</td>
      <td>4075</td>
      <td>4075</td>
      <td>4075</td>
      <td>4075</td>
      <td>4075</td>
      <td>4075</td>
      <td>4075</td>
      <td>4075</td>
    </tr>
    <tr>
      <th>(34.0, 36.68]</th>
      <td>2908</td>
      <td>2908</td>
      <td>2908</td>
      <td>2908</td>
      <td>2908</td>
      <td>2908</td>
      <td>2908</td>
      <td>2908</td>
      <td>2908</td>
      <td>2908</td>
      <td>2908</td>
    </tr>
    <tr>
      <th>(36.68, 39.0]</th>
      <td>5182</td>
      <td>5182</td>
      <td>5182</td>
      <td>5182</td>
      <td>5182</td>
      <td>5182</td>
      <td>5182</td>
      <td>5182</td>
      <td>5182</td>
      <td>5182</td>
      <td>5182</td>
    </tr>
    <tr>
      <th>(39.0, 41.0]</th>
      <td>3956</td>
      <td>3956</td>
      <td>3956</td>
      <td>3956</td>
      <td>3956</td>
      <td>3956</td>
      <td>3956</td>
      <td>3956</td>
      <td>3956</td>
      <td>3956</td>
      <td>3956</td>
    </tr>
    <tr>
      <th>(41.0, 43.0]</th>
      <td>4002</td>
      <td>4002</td>
      <td>4002</td>
      <td>4002</td>
      <td>4002</td>
      <td>4002</td>
      <td>4002</td>
      <td>4002</td>
      <td>4002</td>
      <td>4002</td>
      <td>4002</td>
    </tr>
    <tr>
      <th>(43.0, 45.0]</th>
      <td>4389</td>
      <td>4389</td>
      <td>4389</td>
      <td>4389</td>
      <td>4389</td>
      <td>4389</td>
      <td>4389</td>
      <td>4389</td>
      <td>4389</td>
      <td>4389</td>
      <td>4389</td>
    </tr>
    <tr>
      <th>(45.0, 46.975]</th>
      <td>2419</td>
      <td>2419</td>
      <td>2419</td>
      <td>2419</td>
      <td>2419</td>
      <td>2419</td>
      <td>2419</td>
      <td>2419</td>
      <td>2419</td>
      <td>2419</td>
      <td>2419</td>
    </tr>
    <tr>
      <th>(46.975, 48.484]</th>
      <td>4813</td>
      <td>4813</td>
      <td>4813</td>
      <td>4813</td>
      <td>4813</td>
      <td>4813</td>
      <td>4813</td>
      <td>4813</td>
      <td>4813</td>
      <td>4813</td>
      <td>4813</td>
    </tr>
    <tr>
      <th>(48.484, 50.0]</th>
      <td>4900</td>
      <td>4900</td>
      <td>4900</td>
      <td>4900</td>
      <td>4900</td>
      <td>4900</td>
      <td>4900</td>
      <td>4900</td>
      <td>4900</td>
      <td>4900</td>
      <td>4900</td>
    </tr>
    <tr>
      <th>(50.0, 52.0]</th>
      <td>4728</td>
      <td>4728</td>
      <td>4728</td>
      <td>4728</td>
      <td>4728</td>
      <td>4728</td>
      <td>4728</td>
      <td>4728</td>
      <td>4728</td>
      <td>4728</td>
      <td>4728</td>
    </tr>
    <tr>
      <th>(52.0, 54.0]</th>
      <td>4681</td>
      <td>4681</td>
      <td>4681</td>
      <td>4681</td>
      <td>4681</td>
      <td>4681</td>
      <td>4681</td>
      <td>4681</td>
      <td>4681</td>
      <td>4681</td>
      <td>4681</td>
    </tr>
    <tr>
      <th>(54.0, 56.0]</th>
      <td>4677</td>
      <td>4677</td>
      <td>4677</td>
      <td>4677</td>
      <td>4677</td>
      <td>4677</td>
      <td>4677</td>
      <td>4677</td>
      <td>4677</td>
      <td>4677</td>
      <td>4677</td>
    </tr>
    <tr>
      <th>(56.0, 58.662]</th>
      <td>4483</td>
      <td>4483</td>
      <td>4483</td>
      <td>4483</td>
      <td>4483</td>
      <td>4483</td>
      <td>4483</td>
      <td>4483</td>
      <td>4483</td>
      <td>4483</td>
      <td>4483</td>
    </tr>
    <tr>
      <th>(58.662, 61.0]</th>
      <td>6583</td>
      <td>6583</td>
      <td>6583</td>
      <td>6583</td>
      <td>6583</td>
      <td>6583</td>
      <td>6583</td>
      <td>6583</td>
      <td>6583</td>
      <td>6583</td>
      <td>6583</td>
    </tr>
    <tr>
      <th>(61.0, 64.0]</th>
      <td>6968</td>
      <td>6968</td>
      <td>6968</td>
      <td>6968</td>
      <td>6968</td>
      <td>6968</td>
      <td>6968</td>
      <td>6968</td>
      <td>6968</td>
      <td>6968</td>
      <td>6968</td>
    </tr>
    <tr>
      <th>(64.0, 68.0]</th>
      <td>6623</td>
      <td>6623</td>
      <td>6623</td>
      <td>6623</td>
      <td>6623</td>
      <td>6623</td>
      <td>6623</td>
      <td>6623</td>
      <td>6623</td>
      <td>6623</td>
      <td>6623</td>
    </tr>
    <tr>
      <th>(68.0, 74.0]</th>
      <td>6753</td>
      <td>6753</td>
      <td>6753</td>
      <td>6753</td>
      <td>6753</td>
      <td>6753</td>
      <td>6753</td>
      <td>6753</td>
      <td>6753</td>
      <td>6753</td>
      <td>6753</td>
    </tr>
    <tr>
      <th>(74.0, 107.0]</th>
      <td>7737</td>
      <td>7737</td>
      <td>7737</td>
      <td>7737</td>
      <td>7737</td>
      <td>7737</td>
      <td>7737</td>
      <td>7737</td>
      <td>7737</td>
      <td>7737</td>
      <td>7737</td>
    </tr>
  </tbody>
</table>
</div>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[155]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">model_data</span><span class="p">[</span><span class="n">model_data</span><span class="p">[</span><span class="s2">&quot;SeriousDlqin2yrs&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="s2">&quot;qcut&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()[</span><span class="s2">&quot;SeriousDlqin2yrs&quot;</span><span class="p">]</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[155]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>qcut
(20.999, 28.0]      4243
(28.0, 31.047]      3571
(31.047, 34.0]      4075
(34.0, 36.68]       2908
(36.68, 39.0]       5182
(39.0, 41.0]        3956
(41.0, 43.0]        4002
(43.0, 45.0]        4389
(45.0, 46.975]      2419
(46.975, 48.484]    4813
(48.484, 50.0]      4900
(50.0, 52.0]        4728
(52.0, 54.0]        4681
(54.0, 56.0]        4677
(56.0, 58.662]      4483
(58.662, 61.0]      6583
(61.0, 64.0]        6968
(64.0, 68.0]        6623
(68.0, 74.0]        6753
(74.0, 107.0]       7737
Name: SeriousDlqin2yrs, dtype: int64</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1"># 统计每个分箱中0和1的数量</span>
<span class="c1"># 这里使用了数据透视表的功能groupby</span>
<span class="n">coount_y0</span> <span class="o">=</span> <span class="n">model_data</span><span class="p">[</span><span class="n">model_data</span><span class="p">[</span><span class="s2">&quot;SeriousDlqin2yrs&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="s2">&quot;qcut&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()[</span><span class="s2">&quot;SeriousDlqin2yrs&quot;</span><span class="p">]</span>
<span class="n">coount_y1</span> <span class="o">=</span> <span class="n">model_data</span><span class="p">[</span><span class="n">model_data</span><span class="p">[</span><span class="s2">&quot;SeriousDlqin2yrs&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="s2">&quot;qcut&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()[</span><span class="s2">&quot;SeriousDlqin2yrs&quot;</span><span class="p">]</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[71]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="p">[</span><span class="o">*</span><span class="nb">zip</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">],[</span><span class="s1">&#39;a&#39;</span><span class="p">,</span><span class="s1">&#39;b&#39;</span><span class="p">,</span><span class="s1">&#39;c&#39;</span><span class="p">,</span><span class="s1">&#39;d&#39;</span><span class="p">])]</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[71]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>[(1, &#39;a&#39;), (2, &#39;b&#39;), (3, &#39;c&#39;)]</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[157]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">updown</span><span class="o">.</span><span class="n">shape</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[157]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>(21,)</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[158]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#num_bins值分别为每个区间的上界，下界，0出现的次数，1出现的次数</span>
<span class="n">num_bins</span> <span class="o">=</span> <span class="p">[</span><span class="o">*</span><span class="nb">zip</span><span class="p">(</span><span class="n">updown</span><span class="p">,</span><span class="n">updown</span><span class="p">[</span><span class="mi">1</span><span class="p">:],</span><span class="n">coount_y0</span><span class="p">,</span><span class="n">coount_y1</span><span class="p">)]</span>
<span class="c1">#注意zip会按照最短列来进行结合</span>
<span class="n">num_bins</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[158]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>[(21.0, 28.0, 4243, 5975),
 (28.0, 31.046658442223148, 3571, 5712),
 (31.046658442223148, 34.0, 4075, 6598),
 (34.0, 36.67957524577571, 2908, 5920),
 (36.67957524577571, 39.0, 5182, 5799),
 (39.0, 41.0, 3956, 5594),
 (41.0, 43.0, 4002, 5818),
 (43.0, 45.0, 4389, 5698),
 (45.0, 46.9753970791641, 2419, 5895),
 (46.9753970791641, 48.484187473177656, 4813, 4937),
 (48.484187473177656, 50.0, 4900, 4892),
 (50.0, 52.0, 4728, 6024),
 (52.0, 54.0, 4681, 5362),
 (54.0, 56.0, 4677, 4454),
 (56.0, 58.66193042795457, 4483, 4551),
 (58.66193042795457, 61.0, 6583, 4005),
 (61.0, 64.0, 6968, 3758),
 (64.0, 68.0, 6623, 2645),
 (68.0, 74.0, 6753, 2122),
 (74.0, 107.0, 7737, 1558)]</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="2&#12304;&#36873;&#23398;&#12305;-&#30830;&#20445;&#27599;&#20010;&#31665;&#20013;&#37117;&#26377;0&#21644;1">2&#12304;&#36873;&#23398;&#12305; &#30830;&#20445;&#27599;&#20010;&#31665;&#20013;&#37117;&#26377;0&#21644;1<a class="anchor-link" href="#2&#12304;&#36873;&#23398;&#12305;-&#30830;&#20445;&#27599;&#20010;&#31665;&#20013;&#37117;&#26377;0&#21644;1">&#182;</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="3&#23450;&#20041;WOE&#21644;IV&#20989;&#25968;">3&#23450;&#20041;WOE&#21644;IV&#20989;&#25968;<a class="anchor-link" href="#3&#23450;&#20041;WOE&#21644;IV&#20989;&#25968;">&#182;</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[159]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">columns</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;min&quot;</span><span class="p">,</span><span class="s2">&quot;max&quot;</span><span class="p">,</span><span class="s2">&quot;count_0&quot;</span><span class="p">,</span><span class="s2">&quot;count_1&quot;</span><span class="p">]</span>
<span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">num_bins</span><span class="p">,</span><span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">)</span>
<span class="n">df</span><span class="o">.</span><span class="n">head</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[159]:</div>



<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>min</th>
      <th>max</th>
      <th>count_0</th>
      <th>count_1</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>21.000000</td>
      <td>28.000000</td>
      <td>4243</td>
      <td>5975</td>
    </tr>
    <tr>
      <th>1</th>
      <td>28.000000</td>
      <td>31.046658</td>
      <td>3571</td>
      <td>5712</td>
    </tr>
    <tr>
      <th>2</th>
      <td>31.046658</td>
      <td>34.000000</td>
      <td>4075</td>
      <td>6598</td>
    </tr>
    <tr>
      <th>3</th>
      <td>34.000000</td>
      <td>36.679575</td>
      <td>2908</td>
      <td>5920</td>
    </tr>
    <tr>
      <th>4</th>
      <td>36.679575</td>
      <td>39.000000</td>
      <td>5182</td>
      <td>5799</td>
    </tr>
  </tbody>
</table>
</div>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[160]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;total&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">count_0</span> <span class="o">+</span> <span class="n">df</span><span class="o">.</span><span class="n">count_1</span>
<span class="n">df</span><span class="p">[</span><span class="s2">&quot;percentage&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">total</span> <span class="o">/</span> <span class="n">df</span><span class="o">.</span><span class="n">total</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span>
<span class="n">df</span><span class="p">[</span><span class="s2">&quot;bad_rate&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">count_1</span> <span class="o">/</span> <span class="n">df</span><span class="o">.</span><span class="n">total</span>
<span class="n">df</span><span class="p">[</span><span class="s2">&quot;good%&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">count_0</span><span class="o">/</span><span class="n">df</span><span class="o">.</span><span class="n">count_0</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span>
<span class="n">df</span><span class="p">[</span><span class="s2">&quot;bad%&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">count_1</span><span class="o">/</span><span class="n">df</span><span class="o">.</span><span class="n">count_1</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span>
<span class="n">df</span><span class="p">[</span><span class="s2">&quot;woe&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;good%&quot;</span><span class="p">]</span> <span class="o">/</span> <span class="n">df</span><span class="p">[</span><span class="s2">&quot;bad%&quot;</span><span class="p">])</span>
<span class="n">df</span><span class="o">.</span><span class="n">head</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[160]:</div>



<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>min</th>
      <th>max</th>
      <th>count_0</th>
      <th>count_1</th>
      <th>total</th>
      <th>percentage</th>
      <th>bad_rate</th>
      <th>good%</th>
      <th>bad%</th>
      <th>woe</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>21.000000</td>
      <td>28.000000</td>
      <td>4243</td>
      <td>5975</td>
      <td>10218</td>
      <td>0.052398</td>
      <td>0.584752</td>
      <td>0.043433</td>
      <td>0.061397</td>
      <td>-0.346149</td>
    </tr>
    <tr>
      <th>1</th>
      <td>28.000000</td>
      <td>31.046658</td>
      <td>3571</td>
      <td>5712</td>
      <td>9283</td>
      <td>0.047603</td>
      <td>0.615318</td>
      <td>0.036554</td>
      <td>0.058695</td>
      <td>-0.473559</td>
    </tr>
    <tr>
      <th>2</th>
      <td>31.046658</td>
      <td>34.000000</td>
      <td>4075</td>
      <td>6598</td>
      <td>10673</td>
      <td>0.054731</td>
      <td>0.618195</td>
      <td>0.041713</td>
      <td>0.067799</td>
      <td>-0.485732</td>
    </tr>
    <tr>
      <th>3</th>
      <td>34.000000</td>
      <td>36.679575</td>
      <td>2908</td>
      <td>5920</td>
      <td>8828</td>
      <td>0.045270</td>
      <td>0.670594</td>
      <td>0.029767</td>
      <td>0.060832</td>
      <td>-0.714707</td>
    </tr>
    <tr>
      <th>4</th>
      <td>36.679575</td>
      <td>39.000000</td>
      <td>5182</td>
      <td>5799</td>
      <td>10981</td>
      <td>0.056311</td>
      <td>0.528094</td>
      <td>0.053045</td>
      <td>0.059589</td>
      <td>-0.116330</td>
    </tr>
  </tbody>
</table>
</div>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[161]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">rate</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="s2">&quot;good%&quot;</span><span class="p">]</span> <span class="o">-</span> <span class="n">df</span><span class="p">[</span><span class="s2">&quot;bad%&quot;</span><span class="p">]</span>
<span class="n">iv</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">rate</span> <span class="o">*</span> <span class="n">df</span><span class="o">.</span><span class="n">woe</span><span class="p">)</span>
<span class="n">iv</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[161]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>0.3312838502339025</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#计算WOE和BAD RATE</span>
<span class="c1">#BAD RATE与bad%不是一个东西</span>
<span class="c1">#BAD RATE是一个箱中，坏的样本所占的比例 (bad/total)</span>
<span class="c1">#而bad%是一个箱中的坏样本占整个特征中的坏样本的比例</span>
<span class="k">def</span> <span class="nf">get_woe</span><span class="p">(</span><span class="n">num_bins</span><span class="p">):</span>
    <span class="c1"># 通过 num_bins 数据计算 woe</span>
    <span class="n">columns</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;min&quot;</span><span class="p">,</span><span class="s2">&quot;max&quot;</span><span class="p">,</span><span class="s2">&quot;count_0&quot;</span><span class="p">,</span><span class="s2">&quot;count_1&quot;</span><span class="p">]</span>
    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">num_bins</span><span class="p">,</span><span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">)</span>
    <span class="n">df</span><span class="p">[</span><span class="s2">&quot;total&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">count_0</span> <span class="o">+</span> <span class="n">df</span><span class="o">.</span><span class="n">count_1</span>
    <span class="n">df</span><span class="p">[</span><span class="s2">&quot;percentage&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">total</span> <span class="o">/</span> <span class="n">df</span><span class="o">.</span><span class="n">total</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span>
    <span class="n">df</span><span class="p">[</span><span class="s2">&quot;bad_rate&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">count_1</span> <span class="o">/</span> <span class="n">df</span><span class="o">.</span><span class="n">total</span>
    <span class="n">df</span><span class="p">[</span><span class="s2">&quot;good%&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">count_0</span><span class="o">/</span><span class="n">df</span><span class="o">.</span><span class="n">count_0</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span>
    <span class="n">df</span><span class="p">[</span><span class="s2">&quot;bad%&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">count_1</span><span class="o">/</span><span class="n">df</span><span class="o">.</span><span class="n">count_1</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span>
    <span class="n">df</span><span class="p">[</span><span class="s2">&quot;woe&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;good%&quot;</span><span class="p">]</span> <span class="o">/</span> <span class="n">df</span><span class="p">[</span><span class="s2">&quot;bad%&quot;</span><span class="p">])</span>
    <span class="k">return</span> <span class="n">df</span>
<span class="c1">#计算IV值</span>
<span class="k">def</span> <span class="nf">get_iv</span><span class="p">(</span><span class="n">df</span><span class="p">):</span>
    <span class="n">rate</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="s2">&quot;good%&quot;</span><span class="p">]</span> <span class="o">-</span> <span class="n">df</span><span class="p">[</span><span class="s2">&quot;bad%&quot;</span><span class="p">]</span>
    <span class="n">iv</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">rate</span> <span class="o">*</span> <span class="n">df</span><span class="o">.</span><span class="n">woe</span><span class="p">)</span>
    <span class="k">return</span> <span class="n">iv</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="4-&#21345;&#26041;&#26816;&#39564;&#65292;&#21512;&#24182;&#31665;&#20307;&#65292;&#30011;&#20986;IV&#26354;&#32447;">4 &#21345;&#26041;&#26816;&#39564;&#65292;&#21512;&#24182;&#31665;&#20307;&#65292;&#30011;&#20986;IV&#26354;&#32447;<a class="anchor-link" href="#4-&#21345;&#26041;&#26816;&#39564;&#65292;&#21512;&#24182;&#31665;&#20307;&#65292;&#30011;&#20986;IV&#26354;&#32447;">&#182;</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">num_bins_</span> <span class="o">=</span> <span class="n">num_bins</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
<span class="kn">import</span> <span class="nn">scipy</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[164]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">num_bins_</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[164]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>[(21.0, 28.0, 4243, 5975),
 (28.0, 31.046658442223148, 3571, 5712),
 (31.046658442223148, 34.0, 4075, 6598),
 (34.0, 36.67957524577571, 2908, 5920),
 (36.67957524577571, 39.0, 5182, 5799),
 (39.0, 41.0, 3956, 5594),
 (41.0, 43.0, 4002, 5818),
 (43.0, 45.0, 4389, 5698),
 (45.0, 46.9753970791641, 2419, 5895),
 (46.9753970791641, 48.484187473177656, 4813, 4937),
 (48.484187473177656, 50.0, 4900, 4892),
 (50.0, 52.0, 4728, 6024),
 (52.0, 54.0, 4681, 5362),
 (54.0, 56.0, 4677, 4454),
 (56.0, 58.66193042795457, 4483, 4551),
 (58.66193042795457, 61.0, 6583, 4005),
 (61.0, 64.0, 6968, 3758),
 (64.0, 68.0, 6623, 2645),
 (68.0, 74.0, 6753, 2122),
 (74.0, 107.0, 7737, 1558)]</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">pvs</span> <span class="o">=</span> <span class="p">[]</span>
<span class="c1"># 获取 num_bins_两两之间的卡方检验的置信度（或卡方值）</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">num_bins_</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
    <span class="n">x1</span> <span class="o">=</span> <span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">2</span><span class="p">:]</span>
    <span class="n">x2</span> <span class="o">=</span> <span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">:]</span>

    <span class="c1"># 0 返回 chi2 值，1 返回 p 值。</span>
    <span class="n">pv</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">chi2_contingency</span><span class="p">([</span><span class="n">x1</span><span class="p">,</span><span class="n">x2</span><span class="p">])[</span><span class="mi">1</span><span class="p">]</span>
    <span class="c1"># chi2 = scipy.stats.chi2_contingency([x1,x2])[0]</span>
    <span class="n">pvs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pv</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[82]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">pvs</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[82]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>[1.4541144216637752e-05,
 0.6873868146616421,
 3.408314218772921e-14,
 2.5720153104769723e-91,
 1.2459265971418666e-16,
 0.3504558600526714,
 8.662107210366625e-05,
 3.1363312880202392e-90,
 7.819830227985608e-169,
 0.3514655435877374,
 3.609208437057258e-18,
 0.00014301230590775394,
 1.943594963687778e-10,
 0.032497229772238956,
 9.136097086924781e-70,
 2.4742336879122855e-05,
 1.08182814425799e-22,
 1.6054251295172654e-12,
 5.348034041653975e-33]</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[84]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">i</span> <span class="o">=</span> <span class="n">pvs</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="n">pvs</span><span class="p">))</span>
<span class="n">i</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[84]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>1</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[85]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="p">:</span><span class="n">i</span><span class="o">+</span><span class="mi">2</span><span class="p">]</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[85]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>[(28.0, 31.046658442223148, 3571, 5712),
 (31.046658442223148, 34.0, 4075, 6598)]</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="p">:</span><span class="n">i</span><span class="o">+</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="p">[(</span>
                    <span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span>
                    <span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">],</span>
                    <span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">],</span>
                    <span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">][</span><span class="mi">3</span><span class="p">])]</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[88]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">num_bins_</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[88]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>[(21.0, 28.0, 4243, 5975),
 (28.0, 34.0, 7646, 12310),
 (34.0, 36.67957524577571, 2908, 5920),
 (36.67957524577571, 39.0, 5182, 5799),
 (39.0, 41.0, 3956, 5594),
 (41.0, 43.0, 4002, 5818),
 (43.0, 45.0, 4389, 5698),
 (45.0, 46.9753970791641, 2419, 5895),
 (46.9753970791641, 48.484187473177656, 4813, 4937),
 (48.484187473177656, 50.0, 4900, 4892),
 (50.0, 52.0, 4728, 6024),
 (52.0, 54.0, 4681, 5362),
 (54.0, 56.0, 4677, 4454),
 (56.0, 58.66193042795457, 4483, 4551),
 (58.66193042795457, 61.0, 6583, 4005),
 (61.0, 64.0, 6968, 3758),
 (64.0, 68.0, 6623, 2645),
 (68.0, 74.0, 6753, 2122),
 (74.0, 107.0, 7737, 1558)]</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[89]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="nb">len</span><span class="p">(</span><span class="n">num_bins_</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[89]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>19</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h3 id="&#24490;&#29615;&#23436;&#25104;">&#24490;&#29615;&#23436;&#25104;<a class="anchor-link" href="#&#24490;&#29615;&#23436;&#25104;">&#182;</a></h3>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[166]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">num_bins_</span> <span class="o">=</span> <span class="n">num_bins</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">IV</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">axisx</span> <span class="o">=</span> <span class="p">[]</span>

<span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">num_bins_</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">2</span><span class="p">:</span>
    <span class="n">pvs</span> <span class="o">=</span> <span class="p">[]</span>
    <span class="c1"># 获取 num_bins_两两之间的卡方检验的置信度（或卡方值）</span>
    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">num_bins_</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
        <span class="n">x1</span> <span class="o">=</span> <span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">2</span><span class="p">:]</span>
        <span class="n">x2</span> <span class="o">=</span> <span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">:]</span>
        
        <span class="c1"># 0 返回 chi2 值，1 返回 p 值。</span>
        <span class="n">pv</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">chi2_contingency</span><span class="p">([</span><span class="n">x1</span><span class="p">,</span><span class="n">x2</span><span class="p">])[</span><span class="mi">1</span><span class="p">]</span>
        <span class="c1"># chi2 = scipy.stats.chi2_contingency([x1,x2])[0]</span>
        <span class="n">pvs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pv</span><span class="p">)</span>
    <span class="c1"># 通过 p 值进行处理。合并 p 值最大的两组</span>
    <span class="n">i</span> <span class="o">=</span> <span class="n">pvs</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="n">pvs</span><span class="p">))</span>
    <span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="p">:</span><span class="n">i</span><span class="o">+</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="p">[(</span>
                        <span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span>
                        <span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">],</span>
                        <span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">],</span>
                        <span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">][</span><span class="mi">3</span><span class="p">])]</span>
    <span class="n">bins_df</span> <span class="o">=</span> <span class="n">get_woe</span><span class="p">(</span><span class="n">num_bins_</span><span class="p">)</span>
    <span class="n">axisx</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">num_bins_</span><span class="p">))</span>
    <span class="n">IV</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">get_iv</span><span class="p">(</span><span class="n">bins_df</span><span class="p">))</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">()</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">axisx</span><span class="p">,</span><span class="n">IV</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xticks</span><span class="p">(</span><span class="n">axisx</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">&quot;number of box&quot;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s2">&quot;IV&quot;</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
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
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="5-&#29992;&#26368;&#20339;&#20998;&#31665;&#20010;&#25968;&#20998;&#31665;&#65292;&#24182;&#39564;&#35777;&#20998;&#31665;&#32467;&#26524;">5 &#29992;&#26368;&#20339;&#20998;&#31665;&#20010;&#25968;&#20998;&#31665;&#65292;&#24182;&#39564;&#35777;&#20998;&#31665;&#32467;&#26524;<a class="anchor-link" href="#5-&#29992;&#26368;&#20339;&#20998;&#31665;&#20010;&#25968;&#20998;&#31665;&#65292;&#24182;&#39564;&#35777;&#20998;&#31665;&#32467;&#26524;">&#182;</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">num_bins_</span> <span class="o">=</span> <span class="n">num_bins</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>

<span class="k">def</span> <span class="nf">get_bin</span><span class="p">(</span><span class="n">num_bins_</span><span class="p">,</span><span class="n">n</span><span class="p">):</span>
    <span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">num_bins_</span><span class="p">)</span> <span class="o">&gt;</span> <span class="n">n</span><span class="p">:</span>
        <span class="n">pvs</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">num_bins_</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
            <span class="n">x1</span> <span class="o">=</span> <span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">2</span><span class="p">:]</span>
            <span class="n">x2</span> <span class="o">=</span> <span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">:]</span>
            <span class="n">pv</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">chi2_contingency</span><span class="p">([</span><span class="n">x1</span><span class="p">,</span><span class="n">x2</span><span class="p">])[</span><span class="mi">1</span><span class="p">]</span>
            <span class="c1"># chi2 = scipy.stats.chi2_contingency([x1,x2])[0]</span>
            <span class="n">pvs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pv</span><span class="p">)</span>
        <span class="n">i</span> <span class="o">=</span> <span class="n">pvs</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="n">pvs</span><span class="p">))</span>
        <span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="p">:</span><span class="n">i</span><span class="o">+</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="p">[(</span>
                            <span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span>
                            <span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">],</span>
                            <span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">],</span>
                            <span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="n">num_bins_</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">][</span><span class="mi">3</span><span class="p">])]</span>
    <span class="k">return</span> <span class="n">num_bins_</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[168]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">afterbins</span> <span class="o">=</span> <span class="n">get_bin</span><span class="p">(</span><span class="n">num_bins</span><span class="p">,</span><span class="mi">6</span><span class="p">)</span>
<span class="n">afterbins</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[168]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>[(21.0, 45.0, 32326, 47114),
 (45.0, 46.9753970791641, 2419, 5895),
 (46.9753970791641, 58.66193042795457, 28282, 30220),
 (58.66193042795457, 64.0, 13551, 7763),
 (64.0, 74.0, 13376, 4767),
 (74.0, 107.0, 7737, 1558)]</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[169]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">bins_df</span> <span class="o">=</span> <span class="n">get_woe</span><span class="p">(</span><span class="n">afterbins</span><span class="p">)</span>
<span class="n">bins_df</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[169]:</div>



<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>min</th>
      <th>max</th>
      <th>count_0</th>
      <th>count_1</th>
      <th>total</th>
      <th>percentage</th>
      <th>bad_rate</th>
      <th>good%</th>
      <th>bad%</th>
      <th>woe</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>21.000000</td>
      <td>45.000000</td>
      <td>32326</td>
      <td>47114</td>
      <td>79440</td>
      <td>0.407368</td>
      <td>0.593077</td>
      <td>0.330900</td>
      <td>0.484129</td>
      <td>-0.380534</td>
    </tr>
    <tr>
      <th>1</th>
      <td>45.000000</td>
      <td>46.975397</td>
      <td>2419</td>
      <td>5895</td>
      <td>8314</td>
      <td>0.042634</td>
      <td>0.709045</td>
      <td>0.024762</td>
      <td>0.060575</td>
      <td>-0.894586</td>
    </tr>
    <tr>
      <th>2</th>
      <td>46.975397</td>
      <td>58.661930</td>
      <td>28282</td>
      <td>30220</td>
      <td>58502</td>
      <td>0.299998</td>
      <td>0.516564</td>
      <td>0.289505</td>
      <td>0.310532</td>
      <td>-0.070114</td>
    </tr>
    <tr>
      <th>3</th>
      <td>58.661930</td>
      <td>64.000000</td>
      <td>13551</td>
      <td>7763</td>
      <td>21314</td>
      <td>0.109298</td>
      <td>0.364221</td>
      <td>0.138713</td>
      <td>0.079770</td>
      <td>0.553256</td>
    </tr>
    <tr>
      <th>4</th>
      <td>64.000000</td>
      <td>74.000000</td>
      <td>13376</td>
      <td>4767</td>
      <td>18143</td>
      <td>0.093037</td>
      <td>0.262746</td>
      <td>0.136922</td>
      <td>0.048984</td>
      <td>1.027909</td>
    </tr>
    <tr>
      <th>5</th>
      <td>74.000000</td>
      <td>107.000000</td>
      <td>7737</td>
      <td>1558</td>
      <td>9295</td>
      <td>0.047665</td>
      <td>0.167617</td>
      <td>0.079199</td>
      <td>0.016010</td>
      <td>1.598775</td>
    </tr>
  </tbody>
</table>
</div>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="6-&#23558;&#36873;&#21462;&#26368;&#20339;&#20998;&#31665;&#20010;&#25968;&#30340;&#36807;&#31243;&#21253;&#35013;&#20026;&#20989;&#25968;">6 &#23558;&#36873;&#21462;&#26368;&#20339;&#20998;&#31665;&#20010;&#25968;&#30340;&#36807;&#31243;&#21253;&#35013;&#20026;&#20989;&#25968;<a class="anchor-link" href="#6-&#23558;&#36873;&#21462;&#26368;&#20339;&#20998;&#31665;&#20010;&#25968;&#30340;&#36807;&#31243;&#21253;&#35013;&#20026;&#20989;&#25968;">&#182;</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">graphforbestbin</span><span class="p">(</span><span class="n">DF</span><span class="p">,</span> <span class="n">X</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span><span class="n">q</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span><span class="n">graph</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
    <span class="sd">&quot;&quot;&quot;</span>
<span class="sd">    自动最优分箱函数，基于卡方检验的分箱</span>
<span class="sd">    参数：</span>
<span class="sd">    DF: 需要输入的数据</span>
<span class="sd">    X: 需要分箱的列名</span>
<span class="sd">    Y: 分箱数据对应的标签 Y 列名</span>
<span class="sd">    n: 保留分箱个数</span>
<span class="sd">    q: 初始分箱的个数</span>
<span class="sd">    graph: 是否要画出IV图像</span>
<span class="sd">    区间为前开后闭 (]</span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="n">DF</span> <span class="o">=</span> <span class="n">DF</span><span class="p">[[</span><span class="n">X</span><span class="p">,</span><span class="n">Y</span><span class="p">]]</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
    
    <span class="n">DF</span><span class="p">[</span><span class="s2">&quot;qcut&quot;</span><span class="p">],</span><span class="n">bins</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">qcut</span><span class="p">(</span><span class="n">DF</span><span class="p">[</span><span class="n">X</span><span class="p">],</span> <span class="n">retbins</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">q</span><span class="o">=</span><span class="n">q</span><span class="p">,</span><span class="n">duplicates</span><span class="o">=</span><span class="s2">&quot;drop&quot;</span><span class="p">)</span>
    <span class="n">coount_y0</span> <span class="o">=</span> <span class="n">DF</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="n">DF</span><span class="p">[</span><span class="n">Y</span><span class="p">]</span><span class="o">==</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="s2">&quot;qcut&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()[</span><span class="n">Y</span><span class="p">]</span>
    <span class="n">coount_y1</span> <span class="o">=</span> <span class="n">DF</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span><span class="n">DF</span><span class="p">[</span><span class="n">Y</span><span class="p">]</span><span class="o">==</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="s2">&quot;qcut&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()[</span><span class="n">Y</span><span class="p">]</span>
    <span class="n">num_bins</span> <span class="o">=</span> <span class="p">[</span><span class="o">*</span><span class="nb">zip</span><span class="p">(</span><span class="n">bins</span><span class="p">,</span><span class="n">bins</span><span class="p">[</span><span class="mi">1</span><span class="p">:],</span><span class="n">coount_y0</span><span class="p">,</span><span class="n">coount_y1</span><span class="p">)]</span>
    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">q</span><span class="p">):</span>
        <span class="k">if</span> <span class="mi">0</span> <span class="ow">in</span> <span class="n">num_bins</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">2</span><span class="p">:]:</span>
            <span class="n">num_bins</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="p">[(</span>
                <span class="n">num_bins</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span>
                <span class="n">num_bins</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">],</span>
                <span class="n">num_bins</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">num_bins</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">],</span>
                <span class="n">num_bins</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="n">num_bins</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">3</span><span class="p">])]</span>
        <span class="k">continue</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">num_bins</span><span class="p">)):</span>
            <span class="k">if</span> <span class="mi">0</span> <span class="ow">in</span> <span class="n">num_bins</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">2</span><span class="p">:]:</span>
                <span class="n">num_bins</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">:</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="p">[(</span>
                    <span class="n">num_bins</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span>
                    <span class="n">num_bins</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">1</span><span class="p">],</span>
                    <span class="n">num_bins</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">num_bins</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">2</span><span class="p">],</span>
                    <span class="n">num_bins</span><span class="p">[</span><span class="n">i</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="n">num_bins</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">3</span><span class="p">])]</span>
                <span class="k">break</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="k">break</span>
    <span class="k">def</span> <span class="nf">get_woe</span><span class="p">(</span><span class="n">num_bins</span><span class="p">):</span>
        <span class="n">columns</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;min&quot;</span><span class="p">,</span><span class="s2">&quot;max&quot;</span><span class="p">,</span><span class="s2">&quot;count_0&quot;</span><span class="p">,</span><span class="s2">&quot;count_1&quot;</span><span class="p">]</span>
        <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">num_bins</span><span class="p">,</span><span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">)</span>
        <span class="n">df</span><span class="p">[</span><span class="s2">&quot;total&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">count_0</span> <span class="o">+</span> <span class="n">df</span><span class="o">.</span><span class="n">count_1</span>
        <span class="n">df</span><span class="p">[</span><span class="s2">&quot;percentage&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">total</span> <span class="o">/</span> <span class="n">df</span><span class="o">.</span><span class="n">total</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span>
        <span class="n">df</span><span class="p">[</span><span class="s2">&quot;bad_rate&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">count_1</span> <span class="o">/</span> <span class="n">df</span><span class="o">.</span><span class="n">total</span>
        <span class="n">df</span><span class="p">[</span><span class="s2">&quot;good%&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">count_0</span><span class="o">/</span><span class="n">df</span><span class="o">.</span><span class="n">count_0</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span>
        <span class="n">df</span><span class="p">[</span><span class="s2">&quot;bad%&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">count_1</span><span class="o">/</span><span class="n">df</span><span class="o">.</span><span class="n">count_1</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span>
        <span class="n">df</span><span class="p">[</span><span class="s2">&quot;woe&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;good%&quot;</span><span class="p">]</span> <span class="o">/</span> <span class="n">df</span><span class="p">[</span><span class="s2">&quot;bad%&quot;</span><span class="p">])</span>
        <span class="k">return</span> <span class="n">df</span>
    <span class="k">def</span> <span class="nf">get_iv</span><span class="p">(</span><span class="n">df</span><span class="p">):</span>
        <span class="n">rate</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="s2">&quot;good%&quot;</span><span class="p">]</span> <span class="o">-</span> <span class="n">df</span><span class="p">[</span><span class="s2">&quot;bad%&quot;</span><span class="p">]</span>
        <span class="n">iv</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">sum</span><span class="p">(</span><span class="n">rate</span> <span class="o">*</span> <span class="n">df</span><span class="o">.</span><span class="n">woe</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">iv</span>
    <span class="n">IV</span> <span class="o">=</span> <span class="p">[]</span>
    <span class="n">axisx</span> <span class="o">=</span> <span class="p">[]</span>
    <span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">num_bins</span><span class="p">)</span> <span class="o">&gt;</span> <span class="n">n</span><span class="p">:</span>
        <span class="n">pvs</span> <span class="o">=</span> <span class="p">[]</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">num_bins</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
            <span class="n">x1</span> <span class="o">=</span> <span class="n">num_bins</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">2</span><span class="p">:]</span>
            <span class="n">x2</span> <span class="o">=</span> <span class="n">num_bins</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">:]</span>
            <span class="n">pv</span> <span class="o">=</span> <span class="n">scipy</span><span class="o">.</span><span class="n">stats</span><span class="o">.</span><span class="n">chi2_contingency</span><span class="p">([</span><span class="n">x1</span><span class="p">,</span><span class="n">x2</span><span class="p">])[</span><span class="mi">1</span><span class="p">]</span>
            <span class="n">pvs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pv</span><span class="p">)</span>
        <span class="n">i</span> <span class="o">=</span> <span class="n">pvs</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="n">pvs</span><span class="p">))</span>
        <span class="n">num_bins</span><span class="p">[</span><span class="n">i</span><span class="p">:</span><span class="n">i</span><span class="o">+</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="p">[(</span>
                <span class="n">num_bins</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span>
                <span class="n">num_bins</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">],</span>
                <span class="n">num_bins</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">2</span><span class="p">]</span><span class="o">+</span><span class="n">num_bins</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">][</span><span class="mi">2</span><span class="p">],</span>
                <span class="n">num_bins</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">3</span><span class="p">]</span><span class="o">+</span><span class="n">num_bins</span><span class="p">[</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">][</span><span class="mi">3</span><span class="p">])]</span>
        
        <span class="n">bins_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">get_woe</span><span class="p">(</span><span class="n">num_bins</span><span class="p">))</span>
        <span class="n">axisx</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">num_bins</span><span class="p">))</span>
        <span class="n">IV</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">get_iv</span><span class="p">(</span><span class="n">bins_df</span><span class="p">))</span>
    <span class="k">if</span> <span class="n">graph</span><span class="p">:</span>
        <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">()</span>
        <span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">axisx</span><span class="p">,</span><span class="n">IV</span><span class="p">)</span>
        <span class="n">plt</span><span class="o">.</span><span class="n">xticks</span><span class="p">(</span><span class="n">axisx</span><span class="p">)</span>
        <span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">&quot;number of box&quot;</span><span class="p">)</span>
        <span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s2">&quot;IV&quot;</span><span class="p">)</span>
        <span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
    <span class="k">return</span> <span class="n">bins_df</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h2 id="7&#23545;&#25152;&#26377;&#29305;&#24449;&#36827;&#34892;&#20998;&#31665;&#36873;&#25321;">7&#23545;&#25152;&#26377;&#29305;&#24449;&#36827;&#34892;&#20998;&#31665;&#36873;&#25321;<a class="anchor-link" href="#7&#23545;&#25152;&#26377;&#29305;&#24449;&#36827;&#34892;&#20998;&#31665;&#36873;&#25321;">&#182;</a></h2>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[171]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">model_data</span><span class="o">.</span><span class="n">columns</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[171]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>Index([&#39;SeriousDlqin2yrs&#39;, &#39;RevolvingUtilizationOfUnsecuredLines&#39;, &#39;age&#39;,
       &#39;NumberOfTime30-59DaysPastDueNotWorse&#39;, &#39;DebtRatio&#39;, &#39;MonthlyIncome&#39;,
       &#39;NumberOfOpenCreditLinesAndLoans&#39;, &#39;NumberOfTimes90DaysLate&#39;,
       &#39;NumberRealEstateLoansOrLines&#39;, &#39;NumberOfTime60-89DaysPastDueNotWorse&#39;,
       &#39;NumberOfDependents&#39;, &#39;qcut&#39;],
      dtype=&#39;object&#39;)</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[103]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">model_data</span><span class="p">[</span><span class="s1">&#39;NumberOfTime30-59DaysPastDueNotWorse&#39;</span><span class="p">]</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[103]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>0         0.000000
1         0.000000
2         1.141971
3         0.000000
4         0.000000
5         0.000000
6         1.129686
7         0.000000
8         0.507314
9         0.000000
10        0.000000
11        0.000000
12        0.000000
13        0.000000
14        0.000000
15        0.000000
16        1.000000
17        0.000000
18        5.637304
19        5.870812
20        1.000000
21        2.890170
22        0.000000
23        0.000000
24        0.000000
25        0.000000
26        0.000000
27        0.000000
28        0.000000
29        0.000000
            ...   
194978    0.000000
194979    0.000000
194980    0.798543
194981    0.000000
194982    0.000000
194983    0.000000
194984    0.000000
194985    0.000000
194986    0.000000
194987    0.000000
194988    0.000000
194989    0.000000
194990    2.000000
194991    0.000000
194992    1.486638
194993    0.000000
194994    0.000000
194995    0.791011
194996    0.000000
194997    0.000000
194998    1.000000
194999    0.000000
195000    1.000000
195001    0.000000
195002    0.000000
195003    2.966830
195004    1.000000
195005    0.922931
195006    0.000000
195007    0.000000
Name: NumberOfTime30-59DaysPastDueNotWorse, Length: 195008, dtype: float64</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[172]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">model_data</span><span class="o">.</span><span class="n">columns</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
    <span class="nb">print</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
    <span class="n">graphforbestbin</span><span class="p">(</span><span class="n">model_data</span><span class="p">,</span><span class="n">i</span><span class="p">,</span><span class="s2">&quot;SeriousDlqin2yrs&quot;</span><span class="p">,</span><span class="n">n</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span><span class="n">q</span><span class="o">=</span><span class="mi">20</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>RevolvingUtilizationOfUnsecuredLines
</pre>
</div>
</div>

<div class="output_area">

<div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
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
YII=
"
>
</div>

</div>

<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>age
</pre>
</div>
</div>

<div class="output_area">

<div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
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
"
>
</div>

</div>

<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>NumberOfTime30-59DaysPastDueNotWorse
</pre>
</div>
</div>

<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_text output_error">
<pre>
<span class="ansi-red-fg">---------------------------------------------------------------------------</span>
<span class="ansi-red-fg">ValueError</span>                                Traceback (most recent call last)
<span class="ansi-green-fg">&lt;ipython-input-172-c1e7d811d637&gt;</span> in <span class="ansi-cyan-fg">&lt;module&gt;</span><span class="ansi-blue-fg">()</span>
<span class="ansi-green-intense-fg ansi-bold">      1</span> <span class="ansi-green-fg">for</span> i <span class="ansi-green-fg">in</span> model_data<span class="ansi-blue-fg">.</span>columns<span class="ansi-blue-fg">[</span><span class="ansi-cyan-fg">1</span><span class="ansi-blue-fg">:</span><span class="ansi-blue-fg">-</span><span class="ansi-cyan-fg">1</span><span class="ansi-blue-fg">]</span><span class="ansi-blue-fg">:</span>
<span class="ansi-green-intense-fg ansi-bold">      2</span>     print<span class="ansi-blue-fg">(</span>i<span class="ansi-blue-fg">)</span>
<span class="ansi-green-fg">----&gt; 3</span><span class="ansi-red-fg">     </span>graphforbestbin<span class="ansi-blue-fg">(</span>model_data<span class="ansi-blue-fg">,</span>i<span class="ansi-blue-fg">,</span><span class="ansi-blue-fg">&#34;SeriousDlqin2yrs&#34;</span><span class="ansi-blue-fg">,</span>n<span class="ansi-blue-fg">=</span><span class="ansi-cyan-fg">2</span><span class="ansi-blue-fg">,</span>q<span class="ansi-blue-fg">=</span><span class="ansi-cyan-fg">20</span><span class="ansi-blue-fg">)</span>

<span class="ansi-green-fg">&lt;ipython-input-170-6c3985e2fe5a&gt;</span> in <span class="ansi-cyan-fg">graphforbestbin</span><span class="ansi-blue-fg">(DF, X, Y, n, q, graph)</span>
<span class="ansi-green-intense-fg ansi-bold">     56</span>             x1 <span class="ansi-blue-fg">=</span> num_bins<span class="ansi-blue-fg">[</span>i<span class="ansi-blue-fg">]</span><span class="ansi-blue-fg">[</span><span class="ansi-cyan-fg">2</span><span class="ansi-blue-fg">:</span><span class="ansi-blue-fg">]</span>
<span class="ansi-green-intense-fg ansi-bold">     57</span>             x2 <span class="ansi-blue-fg">=</span> num_bins<span class="ansi-blue-fg">[</span>i<span class="ansi-blue-fg">+</span><span class="ansi-cyan-fg">1</span><span class="ansi-blue-fg">]</span><span class="ansi-blue-fg">[</span><span class="ansi-cyan-fg">2</span><span class="ansi-blue-fg">:</span><span class="ansi-blue-fg">]</span>
<span class="ansi-green-fg">---&gt; 58</span><span class="ansi-red-fg">             </span>pv <span class="ansi-blue-fg">=</span> scipy<span class="ansi-blue-fg">.</span>stats<span class="ansi-blue-fg">.</span>chi2_contingency<span class="ansi-blue-fg">(</span><span class="ansi-blue-fg">[</span>x1<span class="ansi-blue-fg">,</span>x2<span class="ansi-blue-fg">]</span><span class="ansi-blue-fg">)</span><span class="ansi-blue-fg">[</span><span class="ansi-cyan-fg">1</span><span class="ansi-blue-fg">]</span>
<span class="ansi-green-intense-fg ansi-bold">     59</span>             pvs<span class="ansi-blue-fg">.</span>append<span class="ansi-blue-fg">(</span>pv<span class="ansi-blue-fg">)</span>
<span class="ansi-green-intense-fg ansi-bold">     60</span>         i <span class="ansi-blue-fg">=</span> pvs<span class="ansi-blue-fg">.</span>index<span class="ansi-blue-fg">(</span>max<span class="ansi-blue-fg">(</span>pvs<span class="ansi-blue-fg">)</span><span class="ansi-blue-fg">)</span>

<span class="ansi-green-fg">/usr/local/lib/python3.6/dist-packages/scipy/stats/contingency.py</span> in <span class="ansi-cyan-fg">chi2_contingency</span><span class="ansi-blue-fg">(observed, correction, lambda_)</span>
<span class="ansi-green-intense-fg ansi-bold">    251</span>         zeropos <span class="ansi-blue-fg">=</span> list<span class="ansi-blue-fg">(</span>zip<span class="ansi-blue-fg">(</span><span class="ansi-blue-fg">*</span>np<span class="ansi-blue-fg">.</span>where<span class="ansi-blue-fg">(</span>expected <span class="ansi-blue-fg">==</span> <span class="ansi-cyan-fg">0</span><span class="ansi-blue-fg">)</span><span class="ansi-blue-fg">)</span><span class="ansi-blue-fg">)</span><span class="ansi-blue-fg">[</span><span class="ansi-cyan-fg">0</span><span class="ansi-blue-fg">]</span>
<span class="ansi-green-intense-fg ansi-bold">    252</span>         raise ValueError(&#34;The internally computed table of expected &#34;
<span class="ansi-green-fg">--&gt; 253</span><span class="ansi-red-fg">                          &#34;frequencies has a zero element at %s.&#34; % (zeropos,))
</span><span class="ansi-green-intense-fg ansi-bold">    254</span> 
<span class="ansi-green-intense-fg ansi-bold">    255</span>     <span class="ansi-red-fg"># The degrees of freedom</span>

<span class="ansi-red-fg">ValueError</span>: The internally computed table of expected frequencies has a zero element at (0, 0).</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">auto_col_bins</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;RevolvingUtilizationOfUnsecuredLines&quot;</span><span class="p">:</span><span class="mi">6</span><span class="p">,</span>
                <span class="s2">&quot;age&quot;</span><span class="p">:</span><span class="mi">5</span><span class="p">,</span>
                <span class="s2">&quot;DebtRatio&quot;</span><span class="p">:</span><span class="mi">4</span><span class="p">,</span>
                <span class="s2">&quot;MonthlyIncome&quot;</span><span class="p">:</span><span class="mi">3</span><span class="p">,</span>
                <span class="s2">&quot;NumberOfOpenCreditLinesAndLoans&quot;</span><span class="p">:</span><span class="mi">3</span><span class="p">}</span>
<span class="c1">#不能使用自动分箱的变量</span>
<span class="n">hand_bins</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;NumberOfTime30-59DaysPastDueNotWorse&quot;</span><span class="p">:[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">13</span><span class="p">]</span>
            <span class="p">,</span><span class="s2">&quot;NumberOfTimes90DaysLate&quot;</span><span class="p">:[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">17</span><span class="p">]</span>
            <span class="p">,</span><span class="s2">&quot;NumberRealEstateLoansOrLines&quot;</span><span class="p">:[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">54</span><span class="p">]</span>
            <span class="p">,</span><span class="s2">&quot;NumberOfTime60-89DaysPastDueNotWorse&quot;</span><span class="p">:[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">8</span><span class="p">]</span>
            <span class="p">,</span><span class="s2">&quot;NumberOfDependents&quot;</span><span class="p">:[</span><span class="mi">0</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">]}</span>
<span class="c1">#保证区间覆盖使用 np.inf替换最大值，用-np.inf替换最小值</span>
<span class="n">hand_bins</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="p">:[</span><span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">inf</span><span class="p">,</span><span class="o">*</span><span class="n">v</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span><span class="n">np</span><span class="o">.</span><span class="n">inf</span><span class="p">]</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span><span class="n">v</span> <span class="ow">in</span> <span class="n">hand_bins</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[190]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">bins_of_col</span> <span class="o">=</span> <span class="p">{}</span>
<span class="c1"># 生成自动分箱的分箱区间和分箱后的 IV 值</span>
<span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">auto_col_bins</span><span class="p">:</span>
    <span class="n">bins_df</span> <span class="o">=</span> <span class="n">graphforbestbin</span><span class="p">(</span><span class="n">model_data</span><span class="p">,</span><span class="n">col</span>
                                <span class="p">,</span><span class="s2">&quot;SeriousDlqin2yrs&quot;</span>
                                <span class="p">,</span><span class="n">n</span><span class="o">=</span><span class="n">auto_col_bins</span><span class="p">[</span><span class="n">col</span><span class="p">]</span>
                                <span class="c1">#使用字典的性质来取出每个特征所对应的箱的数量</span>
                                <span class="p">,</span><span class="n">q</span><span class="o">=</span><span class="mi">20</span>
                                <span class="p">,</span><span class="n">graph</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
    <span class="n">bins_list</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">bins_df</span><span class="p">[</span><span class="s2">&quot;min&quot;</span><span class="p">])</span><span class="o">.</span><span class="n">union</span><span class="p">(</span><span class="n">bins_df</span><span class="p">[</span><span class="s2">&quot;max&quot;</span><span class="p">]))</span>
    <span class="c1">#保证区间覆盖使用 np.inf 替换最大值 -np.inf 替换最小值</span>
    <span class="n">bins_list</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">bins_list</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">inf</span><span class="p">,</span><span class="n">np</span><span class="o">.</span><span class="n">inf</span>
    <span class="n">bins_of_col</span><span class="p">[</span><span class="n">col</span><span class="p">]</span> <span class="o">=</span> <span class="n">bins_list</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stderr output_text">
<pre>/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:45: RuntimeWarning: divide by zero encountered in log
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[191]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#合并手动分箱数据</span>
<span class="n">bins_of_col</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">hand_bins</span><span class="p">)</span>
<span class="n">bins_of_col</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[191]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>{&#39;DebtRatio&#39;: [-inf,
  0.01723790571264451,
  0.5036376475205819,
  1.4766941820578796,
  inf],
 &#39;MonthlyIncome&#39;: [-inf, 0.1, 7709.080643861425, inf],
 &#39;NumberOfDependents&#39;: [-inf, 0, 1, 2, inf],
 &#39;NumberOfOpenCreditLinesAndLoans&#39;: [-inf,
  8.890647307362393,
  9.081873597549807,
  inf],
 &#39;NumberOfTime30-59DaysPastDueNotWorse&#39;: [-inf, 0, 1, 2, inf],
 &#39;NumberOfTime60-89DaysPastDueNotWorse&#39;: [-inf, 0, 1, 2, inf],
 &#39;NumberOfTimes90DaysLate&#39;: [-inf, 0, 1, 2, inf],
 &#39;NumberRealEstateLoansOrLines&#39;: [-inf, 0, 1, 2, 4, inf],
 &#39;RevolvingUtilizationOfUnsecuredLines&#39;: [-inf,
  0.09909885424999999,
  0.29764654264798535,
  0.46519198100000003,
  0.982651233415105,
  0.9999998999999999,
  inf],
 &#39;age&#39;: [-inf, 45.0, 46.9753970791641, 58.66193042795457, 64.0, inf]}</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="&#35745;&#31639;&#21508;&#31665;&#30340;WOE&#24182;&#26144;&#23556;&#21040;&#25968;&#25454;&#20013;">&#35745;&#31639;&#21508;&#31665;&#30340;WOE&#24182;&#26144;&#23556;&#21040;&#25968;&#25454;&#20013;<a class="anchor-link" href="#&#35745;&#31639;&#21508;&#31665;&#30340;WOE&#24182;&#26144;&#23556;&#21040;&#25968;&#25454;&#20013;">&#182;</a></h1>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[185]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">data</span> <span class="o">=</span> <span class="n">model_data</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="c1">#函数pd.cut，可以根据已知的分箱间隔把数据分箱</span>
<span class="c1">#参数为 pd.cut(数据，以列表表示的分箱间隔)</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">data</span><span class="p">[[</span><span class="s2">&quot;age&quot;</span><span class="p">,</span><span class="s2">&quot;SeriousDlqin2yrs&quot;</span><span class="p">]]</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">data</span><span class="p">[</span><span class="s2">&quot;cut&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">cut</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="s2">&quot;age&quot;</span><span class="p">],[</span><span class="o">-</span><span class="n">np</span><span class="o">.</span><span class="n">inf</span><span class="p">,</span> <span class="mf">48.49986200790144</span><span class="p">,</span> <span class="mf">58.757170160044694</span><span class="p">,</span> <span class="mf">64.0</span><span class="p">,</span><span class="mf">74.0</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">inf</span><span class="p">])</span>
<span class="n">data</span><span class="o">.</span><span class="n">head</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[185]:</div>



<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>age</th>
      <th>SeriousDlqin2yrs</th>
      <th>cut</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>53.000000</td>
      <td>0</td>
      <td>(48.5, 58.757]</td>
    </tr>
    <tr>
      <th>1</th>
      <td>63.000000</td>
      <td>0</td>
      <td>(58.757, 64.0]</td>
    </tr>
    <tr>
      <th>2</th>
      <td>39.716057</td>
      <td>1</td>
      <td>(-inf, 48.5]</td>
    </tr>
    <tr>
      <th>3</th>
      <td>73.000000</td>
      <td>0</td>
      <td>(64.0, 74.0]</td>
    </tr>
    <tr>
      <th>4</th>
      <td>53.636002</td>
      <td>1</td>
      <td>(48.5, 58.757]</td>
    </tr>
  </tbody>
</table>
</div>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[177]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#将数据按分箱结果聚合，并取出其中的标签值</span>
<span class="n">data</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">&quot;cut&quot;</span><span class="p">)[</span><span class="s2">&quot;SeriousDlqin2yrs&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">value_counts</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[177]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>cut             SeriousDlqin2yrs
(-inf, 48.5]    1                   57978
                0                   39558
(48.5, 58.757]  1                   25393
                0                   23469
(58.757, 64.0]  0                   13551
                1                    7621
(64.0, 74.0]    0                   13376
                1                    4767
(74.0, inf]     0                    7737
                1                    1558
Name: SeriousDlqin2yrs, dtype: int64</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[178]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#使用unstack()来将树状结构变成表状结构</span>
<span class="n">data</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">&quot;cut&quot;</span><span class="p">)[</span><span class="s2">&quot;SeriousDlqin2yrs&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">value_counts</span><span class="p">()</span><span class="o">.</span><span class="n">unstack</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[178]:</div>



<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th>SeriousDlqin2yrs</th>
      <th>0</th>
      <th>1</th>
    </tr>
    <tr>
      <th>cut</th>
      <th></th>
      <th></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>(-inf, 48.5]</th>
      <td>39558</td>
      <td>57978</td>
    </tr>
    <tr>
      <th>(48.5, 58.757]</th>
      <td>23469</td>
      <td>25393</td>
    </tr>
    <tr>
      <th>(58.757, 64.0]</th>
      <td>13551</td>
      <td>7621</td>
    </tr>
    <tr>
      <th>(64.0, 74.0]</th>
      <td>13376</td>
      <td>4767</td>
    </tr>
    <tr>
      <th>(74.0, inf]</th>
      <td>7737</td>
      <td>1558</td>
    </tr>
  </tbody>
</table>
</div>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[107]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">bins_df</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">&quot;cut&quot;</span><span class="p">)[</span><span class="s2">&quot;SeriousDlqin2yrs&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">value_counts</span><span class="p">()</span><span class="o">.</span><span class="n">unstack</span><span class="p">()</span>
<span class="n">bins_df</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[107]:</div>



<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th>SeriousDlqin2yrs</th>
      <th>0</th>
      <th>1</th>
    </tr>
    <tr>
      <th>cut</th>
      <th></th>
      <th></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>(-inf, 48.5]</th>
      <td>39558</td>
      <td>57978</td>
    </tr>
    <tr>
      <th>(48.5, 58.757]</th>
      <td>23469</td>
      <td>25393</td>
    </tr>
    <tr>
      <th>(58.757, 64.0]</th>
      <td>13551</td>
      <td>7621</td>
    </tr>
    <tr>
      <th>(64.0, 74.0]</th>
      <td>13376</td>
      <td>4767</td>
    </tr>
    <tr>
      <th>(74.0, inf]</th>
      <td>7737</td>
      <td>1558</td>
    </tr>
  </tbody>
</table>
</div>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[108]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">bins_df</span><span class="p">[</span><span class="s2">&quot;woe&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">log</span><span class="p">((</span><span class="n">bins_df</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">/</span><span class="n">bins_df</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">sum</span><span class="p">())</span><span class="o">/</span><span class="p">(</span><span class="n">bins_df</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">/</span><span class="n">bins_df</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">sum</span><span class="p">()))</span>
<span class="n">bins_df</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[108]:</div>



<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th>SeriousDlqin2yrs</th>
      <th>0</th>
      <th>1</th>
      <th>woe</th>
    </tr>
    <tr>
      <th>cut</th>
      <th></th>
      <th></th>
      <th></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>(-inf, 48.5]</th>
      <td>39558</td>
      <td>57978</td>
      <td>-0.386131</td>
    </tr>
    <tr>
      <th>(48.5, 58.757]</th>
      <td>23469</td>
      <td>25393</td>
      <td>-0.082629</td>
    </tr>
    <tr>
      <th>(58.757, 64.0]</th>
      <td>13551</td>
      <td>7621</td>
      <td>0.571717</td>
    </tr>
    <tr>
      <th>(64.0, 74.0]</th>
      <td>13376</td>
      <td>4767</td>
      <td>1.027909</td>
    </tr>
    <tr>
      <th>(74.0, inf]</th>
      <td>7737</td>
      <td>1558</td>
      <td>1.598775</td>
    </tr>
  </tbody>
</table>
</div>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="k">def</span> <span class="nf">get_woe2</span><span class="p">(</span><span class="n">df</span><span class="p">,</span><span class="n">col</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">bins</span><span class="p">):</span>
    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="n">col</span><span class="p">,</span><span class="n">y</span><span class="p">]]</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
    <span class="n">df</span><span class="p">[</span><span class="s2">&quot;cut&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">cut</span><span class="p">(</span><span class="n">df</span><span class="p">[</span><span class="n">col</span><span class="p">],</span><span class="n">bins</span><span class="p">)</span>
    <span class="n">bins_df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">&quot;cut&quot;</span><span class="p">)[</span><span class="n">y</span><span class="p">]</span><span class="o">.</span><span class="n">value_counts</span><span class="p">()</span><span class="o">.</span><span class="n">unstack</span><span class="p">()</span>
    <span class="n">woe</span> <span class="o">=</span> <span class="n">bins_df</span><span class="p">[</span><span class="s2">&quot;woe&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">log</span><span class="p">((</span><span class="n">bins_df</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">/</span><span class="n">bins_df</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">sum</span><span class="p">())</span><span class="o">/</span><span class="p">(</span><span class="n">bins_df</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">/</span><span class="n">bins_df</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">sum</span><span class="p">()))</span>
    <span class="k">return</span> <span class="n">woe</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#将所有特征的WOE存储到字典当中</span>
<span class="n">woeall</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">bins_of_col</span><span class="p">:</span>
    <span class="n">woeall</span><span class="p">[</span><span class="n">col</span><span class="p">]</span> <span class="o">=</span> <span class="n">get_woe2</span><span class="p">(</span><span class="n">model_data</span><span class="p">,</span><span class="n">col</span><span class="p">,</span><span class="s2">&quot;SeriousDlqin2yrs&quot;</span><span class="p">,</span><span class="n">bins_of_col</span><span class="p">[</span><span class="n">col</span><span class="p">])</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[193]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">woeall</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[193]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>{&#39;DebtRatio&#39;: cut
 (-inf, 0.0172]     1.493300
 (0.0172, 0.504]   -0.009393
 (0.504, 1.477]    -0.472798
 (1.477, inf]       0.174472
 dtype: float64, &#39;MonthlyIncome&#39;: cut
 (-inf, 0.1]        1.360305
 (0.1, 7709.081]   -0.175220
 (7709.081, inf]    0.355978
 dtype: float64, &#39;NumberOfDependents&#39;: cut
 (-inf, 0.0]    0.631259
 (0.0, 1.0]    -0.582210
 (1.0, 2.0]    -0.531595
 (2.0, inf]    -0.479840
 dtype: float64, &#39;NumberOfOpenCreditLinesAndLoans&#39;: cut
 (-inf, 8.891]    -0.100128
 (8.891, 9.082]    1.219887
 (9.082, inf]      0.016237
 dtype: float64, &#39;NumberOfTime30-59DaysPastDueNotWorse&#39;: cut
 (-inf, 0.0]    1.092955
 (0.0, 1.0]    -1.380308
 (1.0, 2.0]    -2.048467
 (2.0, inf]    -2.306575
 dtype: float64, &#39;NumberOfTime60-89DaysPastDueNotWorse&#39;: cut
 (-inf, 0.0]    0.540065
 (0.0, 1.0]    -2.460551
 (1.0, 2.0]    -2.925575
 (2.0, inf]    -2.880735
 dtype: float64, &#39;NumberOfTimes90DaysLate&#39;: cut
 (-inf, 0.0]    0.695135
 (0.0, 1.0]    -2.574850
 (1.0, 2.0]    -2.971783
 (2.0, inf]    -3.147133
 dtype: float64, &#39;NumberRealEstateLoansOrLines&#39;: cut
 (-inf, 0.0]    0.196166
 (0.0, 1.0]     0.010661
 (1.0, 2.0]    -0.122637
 (2.0, 4.0]    -0.415497
 (4.0, inf]    -0.825222
 dtype: float64, &#39;RevolvingUtilizationOfUnsecuredLines&#39;: cut
 (-inf, 0.0991]     2.203963
 (0.0991, 0.298]    0.664389
 (0.298, 0.465]    -0.122636
 (0.465, 0.983]    -1.073433
 (0.983, 1.0]      -0.469400
 (1.0, inf]        -2.044111
 dtype: float64, &#39;age&#39;: cut
 (-inf, 45.0]       -0.380534
 (45.0, 46.975]     -0.894586
 (46.975, 58.662]   -0.070114
 (58.662, 64.0]      0.553256
 (64.0, inf]         1.201543
 dtype: float64}</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[194]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#不希望覆盖掉原本的数据，创建一个新的DataFrame，索引和原始数据model_data一模一样</span>
<span class="n">model_woe</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">index</span><span class="o">=</span><span class="n">model_data</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
<span class="c1">#将原数据分箱后，按箱的结果把WOE结构用map函数映射到数据中</span>
<span class="n">model_woe</span><span class="p">[</span><span class="s2">&quot;age&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">cut</span><span class="p">(</span><span class="n">model_data</span><span class="p">[</span><span class="s2">&quot;age&quot;</span><span class="p">],</span><span class="n">bins_of_col</span><span class="p">[</span><span class="s2">&quot;age&quot;</span><span class="p">])</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">woeall</span><span class="p">[</span><span class="s2">&quot;age&quot;</span><span class="p">])</span>
<span class="c1">#对所有特征操作可以写成：</span>
<span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">bins_of_col</span><span class="p">:</span>
    <span class="n">model_woe</span><span class="p">[</span><span class="n">col</span><span class="p">]</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">cut</span><span class="p">(</span><span class="n">model_data</span><span class="p">[</span><span class="n">col</span><span class="p">],</span><span class="n">bins_of_col</span><span class="p">[</span><span class="n">col</span><span class="p">])</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">woeall</span><span class="p">[</span><span class="n">col</span><span class="p">])</span>
    
<span class="c1">#将标签补充到数据中</span>
<span class="n">model_woe</span><span class="p">[</span><span class="s2">&quot;SeriousDlqin2yrs&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">model_data</span><span class="p">[</span><span class="s2">&quot;SeriousDlqin2yrs&quot;</span><span class="p">]</span>

<span class="c1">#这就是我们的建模数据了</span>
<span class="n">model_woe</span><span class="o">.</span><span class="n">head</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[194]:</div>



<div class="output_html rendered_html output_subarea output_execute_result">
<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>age</th>
      <th>RevolvingUtilizationOfUnsecuredLines</th>
      <th>DebtRatio</th>
      <th>MonthlyIncome</th>
      <th>NumberOfOpenCreditLinesAndLoans</th>
      <th>NumberOfTime30-59DaysPastDueNotWorse</th>
      <th>NumberOfTimes90DaysLate</th>
      <th>NumberRealEstateLoansOrLines</th>
      <th>NumberOfTime60-89DaysPastDueNotWorse</th>
      <th>NumberOfDependents</th>
      <th>SeriousDlqin2yrs</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>-0.070114</td>
      <td>2.203963</td>
      <td>-0.009393</td>
      <td>-0.175220</td>
      <td>-0.100128</td>
      <td>1.092955</td>
      <td>0.695135</td>
      <td>0.196166</td>
      <td>0.540065</td>
      <td>0.631259</td>
      <td>0</td>
    </tr>
    <tr>
      <th>1</th>
      <td>0.553256</td>
      <td>0.664389</td>
      <td>-0.009393</td>
      <td>-0.175220</td>
      <td>-0.100128</td>
      <td>1.092955</td>
      <td>0.695135</td>
      <td>0.196166</td>
      <td>0.540065</td>
      <td>0.631259</td>
      <td>0</td>
    </tr>
    <tr>
      <th>2</th>
      <td>-0.380534</td>
      <td>-2.044111</td>
      <td>-0.009393</td>
      <td>-0.175220</td>
      <td>-0.100128</td>
      <td>-2.048467</td>
      <td>-2.574850</td>
      <td>0.010661</td>
      <td>-2.925575</td>
      <td>-0.479840</td>
      <td>1</td>
    </tr>
    <tr>
      <th>3</th>
      <td>1.201543</td>
      <td>2.203963</td>
      <td>-0.472798</td>
      <td>-0.175220</td>
      <td>0.016237</td>
      <td>1.092955</td>
      <td>0.695135</td>
      <td>-0.122637</td>
      <td>0.540065</td>
      <td>0.631259</td>
      <td>0</td>
    </tr>
    <tr>
      <th>4</th>
      <td>-0.070114</td>
      <td>-1.073433</td>
      <td>-0.009393</td>
      <td>0.355978</td>
      <td>0.016237</td>
      <td>1.092955</td>
      <td>0.695135</td>
      <td>-0.122637</td>
      <td>0.540065</td>
      <td>-0.582210</td>
      <td>1</td>
    </tr>
  </tbody>
</table>
</div>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="&#24314;&#27169;&#19982;&#27169;&#22411;&#39564;&#35777;">&#24314;&#27169;&#19982;&#27169;&#22411;&#39564;&#35777;<a class="anchor-link" href="#&#24314;&#27169;&#19982;&#27169;&#22411;&#39564;&#35777;">&#182;</a></h1>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[195]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">model_woe</span><span class="o">.</span><span class="n">info</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>&lt;class &#39;pandas.core.frame.DataFrame&#39;&gt;
RangeIndex: 195008 entries, 0 to 195007
Data columns (total 11 columns):
age                                     195008 non-null float64
RevolvingUtilizationOfUnsecuredLines    195008 non-null float64
DebtRatio                               195008 non-null float64
MonthlyIncome                           195008 non-null float64
NumberOfOpenCreditLinesAndLoans         195008 non-null float64
NumberOfTime30-59DaysPastDueNotWorse    195008 non-null float64
NumberOfTimes90DaysLate                 195008 non-null float64
NumberRealEstateLoansOrLines            195008 non-null float64
NumberOfTime60-89DaysPastDueNotWorse    195008 non-null float64
NumberOfDependents                      195008 non-null float64
SeriousDlqin2yrs                        195008 non-null int64
dtypes: float64(10), int64(1)
memory usage: 16.4 MB
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="c1">#处理测试集</span>
<span class="n">vali_woe</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">index</span><span class="o">=</span><span class="n">vali_data</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
<span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">bins_of_col</span><span class="p">:</span>
    <span class="n">vali_woe</span><span class="p">[</span><span class="n">col</span><span class="p">]</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">cut</span><span class="p">(</span><span class="n">vali_data</span><span class="p">[</span><span class="n">col</span><span class="p">],</span><span class="n">bins_of_col</span><span class="p">[</span><span class="n">col</span><span class="p">])</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">woeall</span><span class="p">[</span><span class="n">col</span><span class="p">])</span>
<span class="n">vali_woe</span><span class="p">[</span><span class="s2">&quot;SeriousDlqin2yrs&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">vali_data</span><span class="p">[</span><span class="s2">&quot;SeriousDlqin2yrs&quot;</span><span class="p">]</span>
<span class="n">vali_X</span> <span class="o">=</span> <span class="n">vali_woe</span><span class="o">.</span><span class="n">iloc</span><span class="p">[:,:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="n">vali_y</span> <span class="o">=</span> <span class="n">vali_woe</span><span class="o">.</span><span class="n">iloc</span><span class="p">[:,</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="n">X</span> <span class="o">=</span> <span class="n">model_woe</span><span class="o">.</span><span class="n">iloc</span><span class="p">[:,:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">model_woe</span><span class="o">.</span><span class="n">iloc</span><span class="p">[:,</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[197]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">vali_woe</span><span class="o">.</span><span class="n">info</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>&lt;class &#39;pandas.core.frame.DataFrame&#39;&gt;
RangeIndex: 83576 entries, 0 to 83575
Data columns (total 11 columns):
RevolvingUtilizationOfUnsecuredLines    83576 non-null float64
age                                     83576 non-null float64
DebtRatio                               83576 non-null float64
MonthlyIncome                           83576 non-null float64
NumberOfOpenCreditLinesAndLoans         83576 non-null float64
NumberOfTime30-59DaysPastDueNotWorse    83576 non-null float64
NumberOfTimes90DaysLate                 83576 non-null float64
NumberRealEstateLoansOrLines            83576 non-null float64
NumberOfTime60-89DaysPastDueNotWorse    83576 non-null float64
NumberOfDependents                      83576 non-null float64
SeriousDlqin2yrs                        83576 non-null int64
dtypes: float64(10), int64(1)
memory usage: 7.0 MB
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[200]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">from</span> <span class="nn">sklearn.linear_model</span> <span class="k">import</span> <span class="n">LogisticRegression</span> <span class="k">as</span> <span class="n">LR</span>
<span class="n">lr</span> <span class="o">=</span> <span class="n">LR</span><span class="p">()</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">X</span><span class="p">,</span><span class="n">y</span><span class="p">)</span>
<span class="n">lr</span><span class="o">.</span><span class="n">score</span><span class="p">(</span><span class="n">vali_X</span><span class="p">,</span><span class="n">vali_y</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stderr output_text">
<pre>/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to &#39;lbfgs&#39; in 0.22. Specify a solver to silence this warning.
  FutureWarning)
</pre>
</div>
</div>

<div class="output_area">

<div class="prompt output_prompt">Out[200]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>0.8636450655690628</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">c_1</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mf">0.01</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">20</span><span class="p">)</span>
<span class="n">c_2</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">linspace</span><span class="p">(</span><span class="mf">0.01</span><span class="p">,</span><span class="mf">0.2</span><span class="p">,</span><span class="mi">20</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[199]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">score</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">c_2</span><span class="p">:</span>
    <span class="n">lr</span> <span class="o">=</span> <span class="n">LR</span><span class="p">(</span><span class="n">solver</span><span class="o">=</span><span class="s1">&#39;liblinear&#39;</span><span class="p">,</span><span class="n">C</span><span class="o">=</span><span class="n">i</span><span class="p">)</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">X</span><span class="p">,</span><span class="n">y</span><span class="p">)</span>
    <span class="n">score</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">lr</span><span class="o">.</span><span class="n">score</span><span class="p">(</span><span class="n">vali_X</span><span class="p">,</span><span class="n">vali_y</span><span class="p">))</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">()</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">c_2</span><span class="p">,</span><span class="n">score</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
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
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[201]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">lr</span><span class="o">.</span><span class="n">n_iter_</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[201]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>array([7], dtype=int32)</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[202]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">score</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">6</span><span class="p">]:</span>
    <span class="n">lr</span> <span class="o">=</span> <span class="n">LR</span><span class="p">(</span><span class="n">solver</span><span class="o">=</span><span class="s1">&#39;liblinear&#39;</span><span class="p">,</span><span class="n">C</span><span class="o">=</span><span class="mf">0.025</span><span class="p">,</span><span class="n">max_iter</span><span class="o">=</span><span class="n">i</span><span class="p">)</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">X</span><span class="p">,</span><span class="n">y</span><span class="p">)</span>
    <span class="n">score</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">lr</span><span class="o">.</span><span class="n">score</span><span class="p">(</span><span class="n">vali_X</span><span class="p">,</span><span class="n">vali_y</span><span class="p">))</span>
<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">()</span>
<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">6</span><span class="p">],</span><span class="n">score</span><span class="p">)</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stderr output_text">
<pre>/usr/local/lib/python3.6/dist-packages/sklearn/svm/base.py:922: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.
  &#34;the number of iterations.&#34;, ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/svm/base.py:922: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.
  &#34;the number of iterations.&#34;, ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/svm/base.py:922: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.
  &#34;the number of iterations.&#34;, ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/svm/base.py:922: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.
  &#34;the number of iterations.&#34;, ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/svm/base.py:922: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.
  &#34;the number of iterations.&#34;, ConvergenceWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/svm/base.py:922: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.
  &#34;the number of iterations.&#34;, ConvergenceWarning)
</pre>
</div>
</div>

<div class="output_area">

<div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
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
SABQYIuIiAQABbaIiEgAUGCLiIgEgKAK7H379pGdnc1bb71ldikB62c/+xnTp09n6tSpFBQUmF1O
QKmvr+e5557j+9//PtOmTWPdunVmlxTQGhoayM7OJj8/3+xSAs7mzZu5+eabefzxx3n88cf5yU9+
YnZJAWnFihXce++9PPjgg6xfv77T12fr9DX4ibq6On7yk58wZswYs0sJWJs2bWL//v3k5eVRXV3N
Aw88wB133GF2WQFj3bp1jBw5kieeeIKysjJmz57NxIkTzS4rYP32t78lKirK7DIC1o033sjrr79u
dhkBq7q6ml//+tcsX76curo63njjDSZMmNCp6wyawA4NDWXRokUsWrTI7FIC1g033EBaWhoAkZGR
1NfX09LSgtVqNbmywDB58uS228ePHycuLs7EagKby+XiwIEDnf4CKXIxhYWFjBkzBofDgcPh6JKj
FEFzSNxms9GjRw+zywhoVquV8PBwAJYtW8a4ceMU1ldhxowZ/PCHPyQ3N9fsUgLWq6++yo9+9COz
ywhoBw4c4Mknn+SRRx7h008/NbucgHP06FEaGhp48sknefTRRyksLOz0dQbNHrZ0nL/97W8sW7aM
P/zhD2aXEpCWLl3Knj17eOGFF1ixYgUWi8XskgLKe++9x3XXXUdCQoLZpQSspKQknnnmGe6++26O
HDnCzJkzKSgoIDQ01OzSAsrp06f51a9+xbFjx5g5cybr1q3r1N9nBbZckY8//pjf/e53vPnmm0RE
RJhdTkApLi6mT58+9O/fn2uvvZaWlhaqqqro06eP2aUFlPXr13PkyBHWr1/PiRMnCA0NpV+/fowd
O9bs0gJGXFxc21s0iYmJ9O3bl5MnT+qPoCvQp08fMjIysNlsJCYm0qtXr07/fQ6aQ+LiuzNnzvCz
n/2MhQsX0rt3b7PLCThbtmxpOypRWVlJXV0d0dHRJlcVeH75y1+yfPly3n77baZNm8bTTz+tsL5C
K1asYPHixQBUVFRw6tQpnVNxhW655RY2bdqE1+ulurq6S36fg2YPu7i4mFdffZWysjJsNhurV6/m
jTfeUPBcgY8++ojq6mqef/75tq+9+uqrDBgwwMSqAseMGTOYN28ejz76KA0NDcyfP5+QEP3NLF3v
tttu44c//CFr166lubmZH//4xzocfoXi4uK48847efjhhwF46aWXOv33WeM1RUREAoD+vBcREQkA
CmwREZEAoMAWEREJAApsERGRAKDAFhERCQAKbBERkQCgwBYREQkACmwREZEA8P8AacuhOcYYjNMA
AAAASUVORK5CYII=
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[207]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="o">!</span>pip install scikit-plot
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt"></div>


<div class="output_subarea output_stream output_stdout output_text">
<pre>Collecting scikit-plot
  Downloading https://files.pythonhosted.org/packages/7c/47/32520e259340c140a4ad27c1b97050dd3254fdc517b1d59974d47037510e/scikit_plot-0.3.7-py3-none-any.whl
Requirement already satisfied: scipy&gt;=0.9 in /usr/local/lib/python3.6/dist-packages (from scikit-plot) (1.1.0)
Requirement already satisfied: scikit-learn&gt;=0.18 in /usr/local/lib/python3.6/dist-packages (from scikit-plot) (0.20.1)
Requirement already satisfied: matplotlib&gt;=1.4.0 in /usr/local/lib/python3.6/dist-packages (from scikit-plot) (2.1.2)
Requirement already satisfied: joblib&gt;=0.10 in /usr/local/lib/python3.6/dist-packages (from scikit-plot) (0.13.0)
Requirement already satisfied: numpy&gt;=1.8.2 in /usr/local/lib/python3.6/dist-packages (from scipy&gt;=0.9-&gt;scikit-plot) (1.14.6)
Requirement already satisfied: pytz in /usr/local/lib/python3.6/dist-packages (from matplotlib&gt;=1.4.0-&gt;scikit-plot) (2018.7)
Requirement already satisfied: six&gt;=1.10 in /usr/local/lib/python3.6/dist-packages (from matplotlib&gt;=1.4.0-&gt;scikit-plot) (1.11.0)
Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,&gt;=2.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib&gt;=1.4.0-&gt;scikit-plot) (2.3.0)
Requirement already satisfied: python-dateutil&gt;=2.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib&gt;=1.4.0-&gt;scikit-plot) (2.5.3)
Requirement already satisfied: cycler&gt;=0.10 in /usr/local/lib/python3.6/dist-packages (from matplotlib&gt;=1.4.0-&gt;scikit-plot) (0.10.0)
Installing collected packages: scikit-plot
Successfully installed scikit-plot-0.3.7
</pre>
</div>
</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[208]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="kn">import</span> <span class="nn">scikitplot</span> <span class="k">as</span> <span class="nn">skplt</span>
<span class="c1">#%%cmd</span>
<span class="c1">#pip install scikit-plot</span>
<span class="n">vali_proba_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">lr</span><span class="o">.</span><span class="n">predict_proba</span><span class="p">(</span><span class="n">vali_X</span><span class="p">))</span>
<span class="n">skplt</span><span class="o">.</span><span class="n">metrics</span><span class="o">.</span><span class="n">plot_roc</span><span class="p">(</span><span class="n">vali_y</span><span class="p">,</span> <span class="n">vali_proba_df</span><span class="p">,</span>
                        <span class="n">plot_micro</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">6</span><span class="p">,</span><span class="mi">6</span><span class="p">),</span>
                        <span class="n">plot_macro</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[208]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>&lt;matplotlib.axes._subplots.AxesSubplot at 0x7f641c3abd30&gt;</pre>
</div>

</div>

<div class="output_area">

<div class="prompt"></div>




<div class="output_png output_subarea ">
<img src="
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
"
>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing text_cell rendered"><div class="prompt input_prompt">
</div>
<div class="inner_cell">
<div class="text_cell_render border-box-sizing rendered_html">
<h1 id="&#21046;&#20316;&#35780;&#20998;&#21345;">&#21046;&#20316;&#35780;&#20998;&#21345;<a class="anchor-link" href="#&#21046;&#20316;&#35780;&#20998;&#21345;">&#182;</a></h1>
</div>
</div>
</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[210]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">B</span> <span class="o">=</span> <span class="mi">20</span><span class="o">/</span><span class="n">np</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
<span class="n">A</span> <span class="o">=</span> <span class="mi">600</span> <span class="o">+</span> <span class="n">B</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="mi">1</span><span class="o">/</span><span class="mi">60</span><span class="p">)</span>
<span class="n">B</span><span class="p">,</span><span class="n">A</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[210]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>(28.85390081777927, 481.8621880878296)</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[211]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">base_score</span> <span class="o">=</span> <span class="n">A</span> <span class="o">-</span> <span class="n">B</span><span class="o">*</span><span class="n">lr</span><span class="o">.</span><span class="n">intercept_</span>
<span class="n">base_score</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[211]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>array([481.36941636])</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[214]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">lr</span><span class="o">.</span><span class="n">coef_</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[214]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>array([-0.33930438, -0.62862   , -0.0598851 , -0.83140322, -0.80333666,
       -0.63683291, -0.69510619, -1.96878632, -0.56497919, -0.59352962])</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[218]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">score_age</span> <span class="o">=</span> <span class="n">woeall</span><span class="p">[</span><span class="s2">&quot;age&quot;</span><span class="p">]</span> <span class="o">*</span> <span class="p">(</span><span class="o">-</span><span class="n">B</span><span class="o">*</span><span class="n">lr</span><span class="o">.</span><span class="n">coef_</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span>
<span class="n">score_age</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[218]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>age
(-inf, 45.0]        -3.725526
(45.0, 46.975]      -8.758225
(46.975, 58.662]    -0.686435
(58.662, 64.0]       5.416515
(64.0, inf]         11.763414
dtype: float64</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[0]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">file</span> <span class="o">=</span> <span class="s2">&quot;ScoreData2.csv&quot;</span>
<span class="c1">#open是用来打开文件的python命令，第一个参数是文件的路径+文件名，如果你的文件是放在根目录下，则你只需要文件名就好</span>
<span class="c1">#第二个参数是打开文件后的用途，&quot;w&quot;表示用于写入，通常使用的是&quot;r&quot;，表示打开来阅读</span>
<span class="c1">#首先写入基准分数</span>
<span class="c1">#之后使用循环，每次生成一组score_age类似的分档和分数，不断写入文件之中</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file</span><span class="p">,</span><span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">fdata</span><span class="p">:</span>
    <span class="n">fdata</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">&quot;base_score,</span><span class="si">{}</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">base_score</span><span class="p">))</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span><span class="n">col</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">X</span><span class="o">.</span><span class="n">columns</span><span class="p">):</span>
    <span class="n">score</span> <span class="o">=</span> <span class="n">woeall</span><span class="p">[</span><span class="n">col</span><span class="p">]</span> <span class="o">*</span> <span class="p">(</span><span class="o">-</span><span class="n">B</span><span class="o">*</span><span class="n">lr</span><span class="o">.</span><span class="n">coef_</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="n">i</span><span class="p">])</span>
    <span class="n">score</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;Score&quot;</span>
    <span class="n">score</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">col</span>
    <span class="n">score</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span><span class="n">file</span><span class="p">,</span><span class="n">header</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span><span class="n">mode</span><span class="o">=</span><span class="s2">&quot;a&quot;</span><span class="p">)</span>
</pre></div>

</div>
</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[217]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="n">X</span><span class="o">.</span><span class="n">columns</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[217]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>Index([&#39;age&#39;, &#39;RevolvingUtilizationOfUnsecuredLines&#39;, &#39;DebtRatio&#39;,
       &#39;MonthlyIncome&#39;, &#39;NumberOfOpenCreditLinesAndLoans&#39;,
       &#39;NumberOfTime30-59DaysPastDueNotWorse&#39;, &#39;NumberOfTimes90DaysLate&#39;,
       &#39;NumberRealEstateLoansOrLines&#39;, &#39;NumberOfTime60-89DaysPastDueNotWorse&#39;,
       &#39;NumberOfDependents&#39;],
      dtype=&#39;object&#39;)</pre>
</div>

</div>

</div>
</div>

</div>
<div class="cell border-box-sizing code_cell rendered">
<div class="input">
<div class="prompt input_prompt">In&nbsp;[219]:</div>
<div class="inner_cell">
    <div class="input_area">
<div class=" highlight hl-ipython3"><pre><span></span><span class="p">[</span><span class="o">*</span><span class="nb">enumerate</span><span class="p">(</span><span class="n">X</span><span class="o">.</span><span class="n">columns</span><span class="p">)]</span>
</pre></div>

</div>
</div>
</div>

<div class="output_wrapper">
<div class="output">


<div class="output_area">

<div class="prompt output_prompt">Out[219]:</div>




<div class="output_text output_subarea output_execute_result">
<pre>[(0, &#39;age&#39;),
 (1, &#39;RevolvingUtilizationOfUnsecuredLines&#39;),
 (2, &#39;DebtRatio&#39;),
 (3, &#39;MonthlyIncome&#39;),
 (4, &#39;NumberOfOpenCreditLinesAndLoans&#39;),
 (5, &#39;NumberOfTime30-59DaysPastDueNotWorse&#39;),
 (6, &#39;NumberOfTimes90DaysLate&#39;),
 (7, &#39;NumberRealEstateLoansOrLines&#39;),
 (8, &#39;NumberOfTime60-89DaysPastDueNotWorse&#39;),
 (9, &#39;NumberOfDependents&#39;)]</pre>
</div>

</div>

</div>
</div>

</div>
    </div>
  </div>
</body>

 


</html>
